我看到這個錯誤在我的控制檯:爲什麼React說「無效的道具`兒童`」?
警告:無法propType:提供給
ButtonRow
無效道具children
。檢查BookingForm
的渲染方法。
ButtonRow
看起來是這樣的:
import React, {Component, PropTypes} from 'react';
export function Left(props) {
return <div className="left-col">{props.children}</div>;
}
export function Right(props) {
return <div className="right-col">{props.children}</div>;
}
const LeftOrRight = PropTypes.oneOfType([Left, Right]);
export default class ButtonRow extends Component {
static propTypes = {
children: PropTypes.oneOfType([
PropTypes.arrayOf(LeftOrRight),
LeftOrRight,
]).isRequired,
};
render() {
console.log(this.props.children);
let children = React.Children.toArray(this.props.children);
return <div className="row">
{children.filter(c => c.type === Left)}
{children.filter(c => c.type === Right)}
</div>
}
}
ButtonRow.Left = Left;
ButtonRow.Right = Right;
而我渲染這樣的:
<ButtonRow>
<ButtonRow.Left>
xxx
</ButtonRow.Left>
<ButtonRow.Right>
yyy
</ButtonRow.Right>
</ButtonRow>
它顯示正是我所期待。如何驗證失敗?我應該如何設置propTypes
?
理想情況下,我想執行的一個:
- 一個
Left
孩子 - 一個
Right
孩子 - 一個
Left
和一個Right
閒來無事應該接受
只是退後一步。你的左和右無狀態函數有什麼好處呢?含義。它們是相同的。爲什麼他們都擁有他們?爲什麼不只有一個呈現相同的東西?看起來這是過於複雜。 –
@JohnRuddell尚未完成寫作;它們在一秒之內會有所不同;) – mpen
您可以在發出警告的行上放置一個斷點,並使用調用堆棧來查找proptypes驗證失敗的確切位置。再次使用 – zerkms