React-Native:状态是不是用setState更新?

时间:2018-02-23 11:56:38

标签: reactjs react-native

我正在尝试将“loading”的状态从true更改为false但是当我调用一个函数并在该函数设置中“this.setState({loading:false})”时,仍然加载状态仍然为真。

在下面的代码中,当调用buttonPressed函数时,它正在按预期将“loading”状态设置为true,但是当用户成功登录“loading”状态时应该变为false,这样我的renderButton函数将重新渲染并且spinner可以隐藏本身和显示按钮。

为什么“加载”状态在loginSuccess函数中没有变为false?

random.choice

更新-------

这是成功登录后的控制台输出,登录前没有输出

enter image description here

3 个答案:

答案 0 :(得分:3)

正如Hunaid Hassan所说,你没有执行函数this.onLoginSuccess.bind(this),你可以在构造函数中绑定或使用箭头函数来避免绑定(见下面的代码)。

onLoginSuccess = () => {
    this.setState({
        email: '',
        password: '',
        errorMessage: '',
        loading: false,
    }, () => { console.log(this.state.loading) }); // callback function to be called after state is updated
    this.props.buttonPress; // this function isn't executed do this.props.buttonPress() instead
}

答案 1 :(得分:2)

this.onLoginSuccess.bind(this);此行实际上不会调用该函数。

this.onLoginSuccess = this.onLoginSuccess.bind(this);放入构造函数中,然后在firebase auth回调中调用此函数this.onLoginSuccess()

答案 2 :(得分:2)

在@Hunaid-Hassan的回答之上:

onLoginSuccess = () => {//making it arrow will let you avoid using bind
    this.setState(() => ({
        email: '',
        password: '',
        errorMessage: '',
        loading: false
    }));
    this.props.buttonPress;//<-what is it? do you meant to call it? this.props.buttonPress();
}