javascript - 从父级下拉菜单中 react 设置子级状态

标签 javascript reactjs

我有2个js文件。我想从 Component1 更改 Component2 的状态。

class Component1 extends React.Component {
    constructor(props) {
        super(props);          
        this.state = {
            enable: false
        };
        this.enable = React.createRef();
        this.selector = this.selector.bind(this);

    selector() {
        this.setState({
            enable: true,
        })
    }

    render() {
        return ( 
            <div>
                <select><option>ENABLE</option></select>
                <OtherComponent>
                    <Component2 enable={this.state.enable} />  
                </OtherComponent>
            </div>
        )
    }

我要设置enable: true在 Component2 中通过 <option>

class Component2 extends React.Component {
    constructor(props) {
        super(props);
        this.state = {
            enable: false
        }
    }

    componentWillReceiverProps(nextProps) {
        this.setState({ enable: nextProps.enable, })
    }

    render()
        return <div>{this.state.enable}</div>

我之前没有尝试过在 render() 中使用嵌套组件结构。

最佳答案

我们使用 props 将数据从父级状态传递给子级(不需要绑定(bind)父级和子级的状态,或使用 Refs,或尝试涉及生命周期方法):

const { render } = ReactDOM

class Component2 extends React.Component {
    render(){
        return (
          <div>
            Enabled: {this.props.isEnabled ? 'true' : 'false'}
          </div>
        )
    }
}

class OtherComponent extends React.Component {
  render(){
    return <div style={{backgroundColor:'black', color:'white', width:100}}>{this.props.children}</div>
  }
}

class Component1 extends React.Component {
    constructor(props) {
        super(props)
        this.selector = this.selector.bind(this)
        this.state = {
            enable: false
        }
    }
        

    selector() {
        this.setState({
            enable: true
        })
    }

    render() {
        return ( 
            <div>
                <select onChange={this.selector}><option /><option>ENABLE</option></select>
                <OtherComponent>
                  <Component2 isEnabled={this.state.enable} />  
                </OtherComponent>
            </div>
        )
    }
}
    
render (
  <Component1 />,
  document.getElementById('root')
)
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.12.0/umd/react.production.min.js"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.11.0/umd/react-dom.production.min.js"></script><div id="root"></div>

关于javascript - 从父级下拉菜单中 react 设置子级状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60177884/

相关文章:

javascript - jQuery.inArray(),即使包含数组中的值也返回 -1

JavaScript 单击事件仅在 InfoPath 表单上第一次触发

javascript - 防止嵌套的 <Link/> 组件从以前的 <Link/> 继承路径(React router 4)

javascript - React-native 忽略了 StyleSheet 中我所有的容器样式

javascript - .then() 在内部 Promise 解析之前自行解析

c# - 如果JavaScript验证失败,则防止回发页面

javascript - 将结果与 vue.js 中更改的值同步

reactjs - react js : Open same modal from different components

javascript - 当路径应用程序更改时如何停止滚动事件?

javascript - 选择框并获取选项标签