javascript - 是否可以在 React Native 中从其无状态组件子级更改父级的状态?

标签 javascript reactjs react-native

在我的 App.js 中,我已经初始化了一些状态,如下所示,

export default class App extends React.Component {
  constructor(){
    super();
     this.state = {
            myfirststate: '',
            mysecondstate: '',
     }    
    }
    ...
   }

现在我有一个无状态的 ChildComponent.js,就像这样,它有一个按钮,单击时,会将 myfirststate 的状态从 null 更改为 hello

 export default class ChildComponent extends React.Component {
   render() {
    return (
      <View>
        <Button
          title="clickme"
          onPress={() => 
             this.setState({myfirststate: "hello"})
        />
      </View>
      );
     }
    }

可以做这样的事情吗?我一直认为我必须将状态值作为参数传递到函数中,该函数从父组件传递到子组件,就像这样。

App.js

 export default class App extends React.Component {
  constructor(){
   super();
    this.state = {
        myfirststate: '',
        mysecondstate: '',
     }    
   }

 functiontopassvalues(values) {
    this.setState({
        myfirststate: values
    })
   }
   <ChildComponent functiontopassvalues={this.functiontopassvalues} />
  }

ChildComponent.js 中我会做这样的事情

    export default class ChildComponent extends React.Component {
      render() {
        return (
         <View>
           <Button
            title="clickme"
             onPress={() => 
             {this.props.functiontopassvalues("hello")}
        />
      </View>
      );
     }
    }

我希望我说得有道理,请让我知道正确的方法是什么以及为什么会这样。另外,它是否适用于 React Native 和 React.js?

最佳答案

您解决问题的方式是公平且正确的,但它不一定是可扩展的,并且您是正确的,因为您无法改变 child 中 parent 的状态。

我建议查看类似 Redux 的工具, MobXApollo Link State这一切都试图解决状态管理的永恒问题。

关于javascript - 是否可以在 React Native 中从其无状态组件子级更改父级的状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49250651/

相关文章:

javascript - Webpack 代码拆分影响 Web 性能

javascript - 在 React 中单击组件外部时更改状态

reactjs - 在 React/React Native 中检查一个节点是否是另一个节点的父节点

javascript - react native firebase 检查用户是否已存在于实时数据库中

javascript - ES6 将可迭代对象转换为数组时间复杂度

php - "{% %}"语法是什么意思?

javascript - react native : Fetch API URL in development and productive mode

javascript - 如何将我的 expo 应用程序发布到 Apple 应用商店?

javascript - Grunt Sass - 多个 css 样式输出

javascript - 如果已定义,为什么 Promise.all() 会触发 Array.prototype.then?