javascript - 如果事件被触发,子组件只能改变父状态吗?

标签 javascript reactjs react-native jsx

我正在尝试了解子组件如何更改其父组件的状态,并意识到我能够成功完成此操作的唯一示例(也是我在网上看到的唯一示例)处理从 child 的 parent ,然后链接到 child 中的事件(onClick、onChange 等)。因此,如果子组件使用事件调用继承的回调,子组件是否只能更改其父组件的状态?

这个有效:

class Child extends React.Component{
  handleClick(){
    console.log('pressed')
    this.props.message('Hi mom!')
  }
  render(){
    return (<button onClick={this.handleClick.bind(this)}>Prese Me</button>)
  }
};

class Parent extends React.Component {
  constructor(props){
    super(props)
    this.state = {
      messageFromChild: '',
    }
    this.callBackFromParent = this.callBackFromParent.bind(this);
  }
  
  callBackFromParent(dataFromChild){
    this.setState({messageFromChild: dataFromChild})
  }
  
  render(){
    return (
      <div>
        <h2>Message from Child is:</h2>
        <h2>{this.state.messageFromChild}</h2>
        
        <Child message={this.callBackFromParent}/>
      </div>
    )
  }
}

但这会导致无限循环:

class Child extends React.Component{
  render(){
    this.props.message('Hi Mom')
    return(
      <h2>Dummy message from child</h2>
    )
  }
};

class Parent extends React.Component {
  constructor(props){
    super(props)
    this.state = {
      messageFromChild: '',
    }
    this.callBackFromParent = this.callBackFromParent.bind(this);
  }
  
  callBackFromParent(dataFromChild){
    this.setState({messageFromChild: dataFromChild})
  }
  
  render(){
    return (
      <div>
        <h2>Message from Child is:</h2>
        <h2>{this.state.messageFromChild}</h2>
        
        <Child message={this.callBackFromParent}/>
      </div>
    )
  }
}

最佳答案

您不一定需要将函数用作事件处理程序,但直接在 render 上调用它会导致父组件立即 setState,这将导致 的另一个渲染子组件,循环继续。你可以例如在 ChildcomponentDidMount 中设置超时,它将正常工作。

关于javascript - 如果事件被触发,子组件只能改变父状态吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51338381/

相关文章:

javascript - Angular UI - 路由器

javascript - 我正在寻找什么 javascript 对象?单击一个按钮 - 它保持粗体直到单击下一个按钮?

html - create-react-app 在服务器上部署时图标 png 文件加载失败

javascript - 自定义加载器不适用于 react-table

reactjs - React.Children.only 期望收到单个 React 元素子错误

react-native - 输入命令 npm test 时测试失败

javascript - *服务器端* Google Apps 容器绑定(bind)脚本中的 jQuery 库

reactjs - 使用 React Immutability Helpers 处理多个突变的正确方法

javascript - 如何使用 rn-fetch-blob 发送 POST 请求来下载文件?

javascript - JavaScript 中 window.setTimeout 或 window.setInterval 调用的函数列表?