javascript-动态添加子组件时,如何从父组件访问子组件值?

Current Working Example

我正在创建一个搜索表单,其中包含根据用户从选择框中进行的选择而变化的输入元素数量.

我将其分为三个组件,一个名为SearchContainer的包装器,一个名为SearchSelect的选择框,以及仅出于示例目的而在组件内部的SearchSearch和Two的输入.

应用程式
└─SearchContainer表格
   │搜寻选择
   │…多个搜索输入中的任何一个(SearchWithOne,SearchWithTwo)

当用户更改选择框的值时,将加载包含输入的相关组件.该组件可以有1到10个输入.我看过的所有示例都提到使用ref,如果我的输入保持不变,那将很棒.

我目前通过在SearchContainer的onSubmit处理程序中使用以下内容来使其工作

handleSubmit: function(e) {
    e.preventDefault();
    var form = this.getDOMNode();

    [].forEach.call(form.elements, function(e){
        // get the values
    });

    // submit the values to get results.
}

但是,这并不适合执行此操作.有没有更好的推荐方法来遍历子组件并读取其状态?还是可以以某种方式将子级传递给父级状态并以这种方式获取值?

解决方法:

我想我有一个fork of your fiddle形式的解决方案,下面将介绍主要思想.

首先,我不是React专家,但是我喜欢它的想法,并且我知道它越来越受欢迎,所以我想学习更多.我不知道使用composition or inheritance来减少如下所示的代码重复的正确方法.

基本上,我的想法是向每个搜索类添加一个方法,以将其状态暴露给调用类.这是通过createClass调用中的一个非常简单的函数实现的:

getData: function() {
    return this.state;
},

非常简单,必须有一种方法可以使用此方法创建基类或mixin类,然后与其他类继承/组合.我只是不确定如何.现在,您仅可以在需要暴露组件状态的地方复制粘贴这些行.

请记住,这是每个人都喜欢的Flux架构的反面.在Flux中,状态始终来自存在于React组件外部的源对象.

无论如何,暂时放弃较大的体系结构问题,您只需在handleSubmit方法中调用getData即可获取该状态变量.不需要DOM遍历:

handleSubmit: function(e) {
    e.preventDefault();
    var form = this.getDOMNode(),
        fd = new FormData(form);

    var submitData = this.state.SearchBox.getData();

    // submit the values to get results.
},
上一篇:javascript-如何从状态获取数据并编辑表单中的元素?


下一篇:linux各种基础安装博客(nginx、mysql、redis等)