我无法通过子组件在父对象上调用setState
我试图通过在父组件中绑定一个函数并在该函数中调用setState来解决此问题。我在子组件的props中传递了该函数,但仍然找不到父组件的setState函数。
const CrewsAdapter = props => {
if(props.data.loading) {
return <View><Text>Loading crews</Text></View>
}
if(props.data.getAllCrews) {
crewsNames= props.data.getAllCrews.map(crew => ({"value": crew.crewName}));
return (
<View style={{ flexDirection: 'column', alignItems: 'center', backgroundColor: '#ffffff' }}>
<View style={[styles.container, { flex: 0.25 }]}>
<Text style={styles.headerText}>Crews</Text>
</View>
<View style={{ flexDirection: 'row' }}>
<View style={{ flex: 0.9 }}>
<Dropdown label="Crews List"
data={crewsNames}
onChangeText = {(value) => {this.props.stateHandler(value)}}
/>
</View>
</View>
<View style={{ flexDirection: 'row' }}>
<Crew/>
</View>
</View>
);
}
return <View><Text>No data</Text></View>
};
export default class CrewsScreen extends Component {
constructor(props) {
super(props);
this.stateHandler = this.stateHandler.bind(this);
this.state = {
crewName: '',
}
}
stateHandler(value){
this.setState({crewName: value});
}
render() {
const AllCrews = graphql(crewsList, {options: (props => ({}))})(CrewsAdapter);
return (
<SafeAreaView style={styles.screen}>
<ToolBar />
<AllCrews stateHandler = {this.stateHandler}/>
<CrewsListFooter navProps={{...this.props}}/>
</SafeAreaView>
);
}
}
当下拉列表更改时,我正在尝试设置状态。
<Dropdown label="Crews List"
data={crewsNames}
onChangeText = {(value) => {this.props.stateHandler(value)}}
/>
但是我收到错误消息:“未定义不是对象(正在评估_this.props.stateHandler”
对此表示感谢,
答案 0 :(得分:2)
尝试onChangeText = {(value) => {props.stateHandler(value)}}
您的子组件是无状态功能组件-也就是一个函数-以props
作为参数-在这种情况下,您不能通过'this.props'访问props,因为它不是的实例一个React.Component
-就像其他道具一样,您可以通过props.[propName]
进行访问-因此this.props
是不确定的。