道具处理人员不一致地工作?

时间:2016-02-23 17:57:14

标签: javascript reactjs react-native

我正在开发一个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函数运行完美,能够设置祖父组件的状态,而changeSomething函数失败(this.setState不是函数)。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

您应该在ES6类中绑定组件方法。React.createClass自动执行此操作,但您的第二个和第三个组件使用ES6类进行子类化。这是官方网站上的explanation