我正在使用RN应用程序,但是遇到一个问题,由于子组件中发生事件,我试图更改组件的状态,但结果却不一致。

var app = React.createClass({
  render: function() {
    return (
      <MainLogin onLogin={this.onLogin} />
    );
  },
  onLogin: function() {
    this.setState({isLoggedIn: true});
  }
});

class MainLogin extends Component {
  render() {
    return(
      <Login changeSomething={this.changeSomething} onLogin={this.props.onLogin}/>
    );
  }

  changeSomething() {
    this.setState({something: true});
  }
}

class Login extends Component {
  constructor(props) {
    super(props);
  }

  loginPressed() {
    this.props.onLogin(); //This works
  }

  changeSomething() {
    this.props.changeSomething(); //This doesn't work
  }

  render() {
    return (
      <View style={{flex: 1}}>
        <Button onPress={this.changeSomething.bind(this)}>Change Something</Button>
        <Button onPress={this.loginPressed.bind(this)}>Login</Button>
      </View>
    );
  }
}


onLogin函数可以完美运行,并且能够设置Grandparent组件的状态,而changeSomething函数将失败(this.setState不是函数)。

有什么建议么?

最佳答案

您应该自动将ES6类中的组件方法绑定。React.createClass,但是第二个和第三个组件是ES6类的子类。这是有关官方网站上的explanation

关于javascript - Prop 处理人员工作不一致?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35584797/

10-11 12:57