所以我有一个Button组件
import React,{ Component } from 'react'; import { View,Text,TouchableNativeFeedback } from 'react-native'; class Button extends Component { generateComponent() { const { buttonStyle,textStyle } = this.styles; const { text } = this.props; switch (this.props.platform) { case 'android': return ( <TouchableNativeFeedback onPress={this.props.onPress}> <View style={buttonStyle}> <Text style={textStyle}>{text}</Text> </View> </TouchableNativeFeedback> ); case 'ios': return 0; } } render() { return ( <View> { this.generateComponent() } </View> ); } styles = { buttonStyle: { borderRadius: 100,justifyContent: 'center',height: parseInt(this.props.size,10),width: parseInt(this.props.size,backgroundColor: this.props.color,elevation: 3 },textStyle: { fontWeight: 'bold',fontSize: parseInt(this.props.fontSize,lineHeight: parseInt(this.props.fontSize,10) + Math.floor(parseInt(this.props.fontSize,10) / 10) + 1,color: this.props.fontColor,textAlign: 'center' } } } Button.propTypes = { text: React.PropTypes.string.isrequired,platform: React.PropTypes.string.isrequired,size: React.PropTypes.string.isrequired,color: React.PropTypes.string.isrequired,fontColor: React.PropTypes.string.isrequired,fontSize: React.PropTypes.string.isrequired,onPress: React.PropTypes.function.isrequired }; export default Button;
我在组件Home中调用此组件
import React,{ Component } from 'react'; import { View } from 'react-native'; import Metas from '../components/Metas'; import Button from '../components/Button'; export default class Home extends Component { constructor(props) { super(props); this.state = { Metas: ['Meta 1','Meta 2','Meta 3'] }; } render() { return ( <View> <Metas data={ this.state.Metas } /> <Button text="+" platform={ this.props.platform } onPress={ this._handleButtonPress } size='50' fontSize='25' color='#FFD600' fontColor='white' /> </View> ); } _handleButtonPress() { console.log("Hello!"); } } Home.propTypes = { platform: React.PropTypes.string.isrequired };
问题是,如果我包含PropTypes,我会收到一个错误,指出onPress道具未定义.
我不明白为什么我收到这个错误.我安慰记录了onPress的typeof并打印功能.
有什么建议??
解决方法
更新于2017年9月
从React 15.5开始,PropTypes已被移动到它自己的库中.像这样用它:
import PropTypes from 'prop-types'; class Example extends React.Component { render() { return ( <h1>{this.props.test}</h1> ); } } Example.propTypes = { test: PropTypes.string };
资料来源:https://facebook.github.io/react/docs/typechecking-with-proptypes.html