动态添加子组件值时,如何从父组件访问这些值
How can I access child components values from a parent component when they are added dynamically?
当前工作示例
我正在创建一个搜索表单,根据用户从选择框中的选择,该表单具有不同数量的输入元素。
我将其分解为三个组件,一个称为SearchContainer
的包装器,一个名为SearchSelect
的选择框,以及组件内的输入SearchWithTwo
和SearchWithOne
。
App
└─SearchContainer Form
│ SearchSelect
│ ... any one of the multiple search inputs (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.
}
然而,这感觉不是正确的方式。是否有更好的推荐方法来迭代子组件并读取它们的状态?或者我可以以某种方式将孩子传递到父状态并以这种方式获得值吗?
我想我有一个解决方案,它的形式是你的小提琴的叉子,我将在下面介绍主要想法。
首先,我不是React专家,但我喜欢它的想法,我知道它越来越受欢迎,所以我想了解更多。我不知道的是使用组合或继承来减少下面显示的代码重复的正确方法。
基本上,我的想法是为每个search
类添加一个方法,将其state
公开给调用类。这是在createClass
调用中作为一个非常简单的函数实现的:
getData: function() {
return this.state;
},
它非常简单,必须有一种方法用这个方法创建基类或mixin类,然后用其他类继承/组合它。我只是不知道怎么做。现在,您可以将这些行复制粘贴到任何有意义的地方,以公开组件的状态。
请记住,这是每个人都喜欢的Flux架构的诅咒。在Flux中,状态总是来自React组件之外的源对象。
无论如何,暂时放弃更大的体系结构问题,您可以通过在handleSubmit
方法中调用getData
来获取state
变量。无需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.
},
- 从vuejs中的组件模板访问父方法
- 回流:让多个组件访问同一个Store
- 访问vue组件中的ID标记
- Angular 2-如何从ControlGroup访问子组件
- 如何从Vue.js中的子组件访问父方法
- 访问Vuejs组件内部的元素
- 访问要在 React Native Text 组件中显示的对象数组
- 如何从一个组件访问另一个组件的状态
- 对自定义组件中的本地访问引用进行反应
- 动态添加子组件值时,如何从父组件访问这些值
- 如何访问Vue.js中深度嵌套的子组件中的数据
- 每次加载页面时,火狐附加组件访问变量
- React.js:从独立组件访问整个应用程序状态
- Vue.js从子组件访问父/根数据
- 从另一个组件访问函数内的React组件
- ReactJS:从基本组件访问上下文
- 从深度嵌套的组件访问redux分派
- 从子组件访问父组件/属性
- 可以't从子组件访问状态
- 从react组件访问环境变量