代码之家  ›  专栏  ›  技术社区  ›  Ameer Hamza

本地响应:如何从子组件更改父组件的状态并重新呈现父组件?

  •  1
  • Ameer Hamza  · 技术社区  · 6 年前

    我有“rootcomponent”,它有一个状态 伊洛格丁 和负载 登录 主页 作为:

    ..
    ..
    switch (this.state.isLoggedIn) {
    case 'true':
    return (
    <Home />
    );
    
    case 'false':
    return (
    <Login />
    );
    
    default:
    return <Spinner size='large' color='red' />; 
    }
    ...
    

    登录 我想换衣服 伊洛格丁 按下“登录”按钮并重新发送到时的状态 主页 屏幕。不使用Redux。

    2 回复  |  直到 6 年前
        1
  •  1
  •   Aseem Upadhyay    6 年前

    您的父组件应该将属性传递给登录组件和主组件。您需要的是父组件中更新父组件状态的方法。该方法将作为prop-to-login组件传递。

    根组件应该如下所示

    handleClick() { this.setState({isLoggedIn: true}); }
    render() { 
       return ( 
          {!this.state.isLoggedIn && <Login handleClick={this.handleClick}/>} 
          {this.state.isLoggedIn && <Home />
        );}
    

    您的登录组件

    render() { return (<Button
    onPress={this.props.handleClick}
    title="Press Me"
    />;}
    

    流量- 当用户单击按钮时, handleClick 将调用作为props传递的函数。因此,将执行父组件中的方法,这将更新状态 isLoggedIn .一旦状态被更新,新的值将被传递给登录和主组件,它们将把它作为更新的属性来处理,因此将重新呈现。

        2
  •  2
  •   Robert Mennell    6 年前

    您需要将一个函数传递给登录组件,一旦登录,将调用该组件并更新父组件的状态:

    ...
    switch (this.state.isLoggedIn) {
      case 'true':
        return (
          <Home />
        );
    
      case 'false':
        return (
        <Login updateLoginState={() => this.setState(state => ({ isLoggedIn: 'true'}))} />
        );
    
      default:
        return <Spinner size='large' color='red' />; 
    }
    ...
    

    在登录组件中,只需调用 this.props.updateLoginState() 在登录过程完成时

    虽然我不确定你是如何到达自旋体状态的…