使用不同道具在容器中多次响应渲染组件
React render component multiple times in container with different props?
我正在尝试创建一个可重用的"标签"React组件,以便用户可以在单击时创建标签并查看DOM中显示的信息。
这是模块:
module.exports = React.createClass({
render: function() {
return (
<div className="language chip" data-lang={this.props.language} data-lang-level={this.props.level}>
{this.props.language} ({this.props.level})
<i className="material-icons">close</i>
</div>
);
}
});
和点击呼叫:
var addLanguage = $('a#add-language');
addLanguage.click(function() {
var languageLearning = $('#language-learning');
var levelLearning = $('#language-level');
if (languageLearning != null && levelLearning != null) {
ReactDOM.render(
<LanguageChip
language={languageLearning.val()}
level={levelLearning.val()}
/>,
document.getElementById('language-chips')
);
languageLearning.select2('val', '');
levelLearning.select2('val', '');
}
})
我没有意识到,在使用 React.DOM 时,"第一次调用时,任何现有的 DOM 元素都会被替换。这意味着当添加第二个芯片时,第一个芯片被移除。我希望用户能够拥有多个芯片。
我该怎么做?
我不知道
您是否有充分的理由不添加用于在组件上创建标签的表单,但如果可以的话,它会简单得多。然后,您只需要在数组上添加标签,并使用LanguageChip
组件显示它们。
我在这里举了一个例子:https://jsfiddle.net/snahedis/69z2wepo/28193/
我不知道你对 React 的理解程度如何,所以如果有什么不清楚的地方,请告诉我:)
编辑:预先存在的表单中的相同示例:https://jsfiddle.net/snahedis/69z2wepo/28217/
您需要使用数组来存储多个芯片数据。看看这个简化的例子:http://output.jsbin.com/seficu
var LanguageChips = React.createClass({
render: function() {
return (
<div>
{
(this.props.chipsArray).map(function(chip, index) {
return <LanguageChip
key={index}
language={chip.languageLearning}
level={chip.levelLearning}
/>
})
}
</div>
);
}
});
var LanguageChip = React.createClass({
render: function() {
return (
<div className="language chip" data-lang={this.props.language} data-lang-level={this.props.level}>
{this.props.language} ({this.props.level})
<i className="material-icons"></i>
</div>
);
}
});
var chipsArray = [];
document.getElementById('add-language').addEventListener("click", function() {
var languageLearning = 'test1';
var levelLearning = 'test2';
if (languageLearning != null && levelLearning != null) {
chipsArray.push({
languageLearning: languageLearning,
levelLearning: levelLearning
});
ReactDOM.render(
<LanguageChips chipsArray={chipsArray} />,
document.getElementById('language-chips')
);
}
})
相关文章:
- React重新渲染但未显示正确的组件
- 不能从angular2中的子组件指定父组件中的数组
- 拨打'父亲'函数形式a'儿童'ReactJS中的组件
- 我不知道如何正确地将REST响应对象传递给ReactJS子组件
- 为什么我的附加组件面板的内容脚本在更改 contentURL 后不再响应端口消息
- 响应组件之间的交互
- 引导组件选项卡、轮播等没有响应
- 如何将 API 调用的响应从触发器传递到 Salesforce 中的侧边栏组件
- 使用不同道具在容器中多次响应渲染组件
- React子组件不响应状态更改
- 来自jsonp响应的ExtJS 4构建组件
- 使用VueJS 2.0和vue-mdl菜单组件,如何响应单击事件?
- 动态响应多个组件的更改状态
- 使用仅浏览器应用时,firebase-element聚合物组件没有响应
- 尝试在React组件中发出Ajax请求并使用响应
- 在对另一个组件执行http请求时保持响应性
- 在原生android视图(UI组件)中渲染原生响应组件
- ReactJS ajax响应错误呈现在组件中
- reactJs测试模拟组件输入和响应,从哪里开始
- 聚合物:为响应服务器响应的组件编写演示和测试