无法在父组件中设置状态

时间:2019-05-18 22:22:10

标签: reactjs react-native graphql

我无法通过子组件在父对象上调用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”

对此表示感谢,

1 个答案:

答案 0 :(得分:2)

尝试onChangeText = {(value) => {props.stateHandler(value)}}

您的子组件是无状态功能组件-也就是一个函数-以props作为参数-在这种情况下,您不能通过'this.props'访问props,因为它不是的实例一个React.Component-就像其他道具一样,您可以通过props.[propName]进行访问-因此this.props是不确定的。