简介
在flow-router
中,需要配合使用react-mounter
来加载react
组件,官方文档中给出了两种写法,随着react
的发展,有些可能会报错.
第一种写法
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| const MainLayout = ({content}) => ( <div> <header> This is our header </header> <main> {content()} </main> </div> );
mount(MainLayout, { content: () => (<WelcomeComponent name="Arunoda" />) });
|
现在需要使用如下格式,特别是this.props.content()
,不然会报错:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| export default class AppLayout extends Component { render() { return ( <div> <Header /> {this.props.content()} <Footer /> </div> ); } }
AppLayout.propTypes = { content: PropTypes.func.isRequired, };
//在路由文件中,调用 mount(AppLayout, { content: () => (<Welcome />), });
|
注意,它的类型为PropTypes.func
,是个函数,其他类型会报错;
另一种写法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| export default class AppLayout extends Component { render() { return ( <div> <Header /> {this.props.content} <Footer /> </div> ); } }
AppLayout.propTypes = { content: PropTypes.element.isRequired, };
//在路由文件中,调用 mount(AppLayout, { content: <Welcome />, });
|
注意,这里它的类型为PropTypes.element
;
所有PropTypes类型
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| // 基本类型,默认可传可不传 React.PropTypes.array React.PropTypes.bool React.PropTypes.func React.PropTypes.number React.PropTypes.object React.PropTypes.string
// 所有可以被渲染的对象:数字,字符串,DOM 元素或包含这些类型的数组 React.PropTypes.node
//react元素 React.PropTypes.element
// 用 JS 的 instanceof 操作符声明 prop 为类的实例。 optionalMessage: React.PropTypes.instanceOf(Message),
// 用 enum 来限制 prop 只接受指定的值。 optionalEnum: React.PropTypes.oneOf(['News', 'Photos']),
// 指定的多个对象类型中的一个 optionalUnion: React.PropTypes.oneOfType([ React.PropTypes.string, React.PropTypes.number, React.PropTypes.instanceOf(Message) ]),
// 指定类型组成的数组 optionalArrayOf: React.PropTypes.arrayOf(React.PropTypes.number),
// 指定类型的属性构成的对象 optionalObjectOf: React.PropTypes.objectOf(React.PropTypes.number),
// 特定形状参数的对象 optionalObjectWithShape: React.PropTypes.shape({ color: React.PropTypes.string, fontSize: React.PropTypes.number }),
// 以后任意类型加上 `isRequired` 来使 prop 不可空。 requiredFunc: React.PropTypes.func.isRequired,
// 不可空的任意类型 requiredAny: React.PropTypes.any.isRequired,
// 自定义验证器。如果验证失败需要返回一个 Error 对象。不要直接 // 使用 `console.warn` 或抛异常,因为这样 `oneOfType` 会失效。 customProp: function(props, propName, componentName) { if (!/matchme/.test(props[propName])) { return new Error('Validation failed!'); } }
|