当前位置: 首页 > 知识库问答 >
问题:

反应-将子下拉菜单状态传递给父级

卢和昶
2023-03-14

我正在尝试设置一个使用React的页面。该页面有一个下拉菜单组件,它应该触发父级中的状态更新。我尝试了以下几个例子,但没有任何效果。以下是我尝试过的两种方法的简化示例:

>

  • 将回调作为更新父状态的道具传递给子节点:

    let Example = React.createClass({
    
    getInitialState() {
        test: "fail"
    },
    _updateOnChange(value) {
        this.setState({test: value})
    },
    render() {
        return (<div><DropDown onValueChange=this._updateOnChange} />
        <p>{this.state.test}</p></div>);
    }    
    });
    
    let DropDown = React.createClass({
    getInitialState() {
        return { value: "fail" };
    },
    _onChangeHandler(e) {
        this.setState({value: e.target.value});
        this.props.onValueChange(this.state.value);
    },
    
    render() {
        return (
            <select onChange={this._onChangeHandler} value={this.state.value}>
                <option value="1">1</option>
                <option value="2">2</option>
            </select>
        );
    }
    

    });

    这始终显示“失败”,而不是“1”或“2”。

    让父级使用onChange而不是回调获取下拉菜单的值。

    let Example = React.createClass({
    getInitialState() {
        test: "fail"
    },
    _updateOnChange(e) {
        this.setState({test: e.target.value})
    },
    render() {
       return (<DropDown onChange=this._updateOnChange} />);
    }
    

    });

    let DropDown = React.createClass({
    getInitialState() {
        return { value: "fail" };
    },
    _onChangeHandler(e) {
        this.setState({value: e.target.value});
    },
    
    render() {
        return (
            <select onChange={this._onChangeHandler} value={this.state.value}>
                <option value="1">1</option>
                <option value="2">2</option>
            </select>
        );
    }
    

    });

    如果我尝试渲染状态,我可以在下拉组件中看到状态更改,但父级没有更改。我做错了什么?

  • 共有1个答案

    萧繁
    2023-03-14

    您的第一种方法应该可以很好地工作,但需要做一些更改

    方法getInvalState应该返回这样的对象

    getInitialState() {
      return { test: "fail" }
    }
    

    下拉组件中的_onChangeHandler有问题。有两种方法可以解决这个问题

    第二行this.props.onValueChange(this.state.value) 将不会执行,因此它将显示旧值。setstate定义如下所示

    setState(函数|对象nextState[,函数回调])

    使用回调函数确保已设置状态,然后执行this.prop

    _onChangeHandler(e) {
      var self = this;
      this.setState({value: e.target.value}, function(){
        self.props.onValueChange(self.state.value); // <---- Makes sure that the state has been set at this stage
      });
    },
    

    不要传递this.state.value而是像这样发送e.target.value

    _onChangeHandler(e) {
      this.setState({value: e.target.value});
      this.props.onValueChange(e.target.value); // <--- pass the value directly
    },
    

    这是一个演示https://jsfiddle.net/dhirajbodicherla/aqqcg1sa/4/

     类似资料:
    • 问题内容: 我是堆栈溢出的新手。我需要创建一个静态下拉列表,然后根据在静态下拉列表中选择的值创建一个动态下拉列表。只是Coldfusion和html。没有其他花哨的东西。因此,从第一个下拉菜单中,用户将选择:颜色,ID,官员,学校,然后点击“继续”按钮 然后在同一页面或不同页面上,如果选择了颜色,它将在数据库中进行查询并给出不同颜色的结果,如果选择了id,则将提供查询中的ID编号列表。如果选择了这

    • 我想从可运行线程抛出异常,但不可能从线程抛出它,所以我们可以将chlild线程的状态(任何异常)传递给父线程吗?. 我读到过thread.join(),但在这种情况下,父线程会一直等到子线程完成执行。 在我的例子中,我的父线程在一段时间后逐个启动线程,但当任何线程抛出异常时,它应该将失败通知paent,以便父线程不会启动其他线程。 有什么方法可以实现吗?谁能帮我解决这个问题。

    • 实现带动画效果的下拉菜单。用户按下菜单按钮,出现下拉按钮,用户松开菜单按钮,下拉按钮收回。 [Code4App.com]

    • 我试图在mapbox gl地图上设置一个标记,点击地图,然后将lngLat对象传递回父组件。请告诉我怎样才能做到这一点。我刚开始学习反应,但我知道道具只能从父类继承,setState只能设置本地状态。 父组件如下所示 我正在学习这个教程https://github.com/laneysmith/react-mapbox-example

    • 问题内容: 我在这里有一个简单的设置: 我有一个父组件,该父组件有2个子组件。在第一个子组件中:用户更改输入的值。然后,该更改的值将是我想要从该孩子传递给父对象的道具,以便可以将其传递给与同一父组件相连的另一个孩子。 当前设置的这个,请查看 从用户输入到UI更改的流程:1.在“ Child 1”中:调整一个滑块,将onChange值传递给父组件;2.将此属性(新的滑块值)传递给Parent组件,以

    • 问题内容: 在React中,我有类似的文件 parent.js 包含文本框和按钮 child.js 包含P标签 App.js 包含父组件和子组件 问题 将“父级”上的“文本框”值传递给子级,并将其显示在子级标记中。 完整代码 堆叠 问题答案: 更新了示例以将数据传递给子组件。 https://stackblitz.com/edit/react- trmj9i?file=child.js 在下面添加