当使用新道具调用渲染时,React JS没有完全更新视图
React JS Not Completely Updating View When Render Is Called With New Props
在React JS中,我有一个数组,我作为一个道具传递(我不想使用状态)。如果我从数组中删除一个项目并重新呈现该组件,则字段更新的是数量,但不更新值。被传递的道具被更新。我不想设置textarea的值,因为我不想为这个组件使用state,所以prop是textarea的子组件。这不是我的实际组件,而是我创建的用来演示问题的东西。我的理解是,当道具更新时,视图也应该更新。
这是一个JSFiddle: https://jsfiddle.net/69z2wepo/12745/
items=["One","Two","Three","Four","Five"];
var Areas=React.createClass({
handleClickAdd: function() {
items.push("");
rerender();
},
handleClickRemove: function(fieldindex,event) {
items.splice(fieldindex,1);
rerender();
},
handleKeyUp: function(event) {
sdbobj.resizeArea(event.target);
},
render: function() {
return (
<div>
{this.props.items.map(function(item,i,arr){
return (
<div key={i}>
<textarea onKeyUp={this.handleKeyUp}>
{item}
</textarea>
{(arr.length>1?<button onClick={this.handleClickRemove.bind(this,i)}>Remove</button>:"")}
</div>
)
}.bind(this)) }
<button onClick={this.handleClickAdd}>
Add
</button>
<div>
Items = [{items.toString()}]
</div>
</div>
)
}
});
function resizeArea(elem)
{
elem.style.height="1px";
elem.style.height=(elem.scrollHeight)+"px";
}
function rerender()
{
React.render(<Areas items={items} />, document.getElementById('container'));
}
React.render(<Areas items={items} />, document.getElementById('container'));
感谢您的帮助。
谢谢
Checkout React的文章…因为键是索引,所以在你删除条目之后,它就不同步了,React看不到它的变化。如果您将键绑定到项目文本或项目id,则应该可以工作。
<div key={item}>
<textarea onKeyUp={this.handleKeyUp}>
{item}
</textarea>
{(arr.length>1?<button onClick={this.handleClickRemove.bind(this,i)}>Remove</button>:"")}
</div>
相关文章:
- $routeParams在传递到新视图时未定义&控制器
- 使用应用程序状态js和视图在angular js url上传递两个参数
- 使用Ruby数组使用JS在视图中进行迭代和显示
- 如何将.js从视图移动到单独的资产 - Ruby On Rails
- 如何使用 C# 和 Angular js 在视图上显示数据
- 挖空.js:等待视图模型实例化完成
- 停止Angular JS ng视图擦除页面
- 如何在渲染新视图之前关闭所有事件
- 从Backbone中的另一个视图调用新视图
- 视图是指定给模型的还是指定给Backbone.js中视图的模型
- Angular2 在创建 ngSwitch 新视图后调用自定义函数
- Knockout js网格视图未显示
- Angular JS Mathml视图未处理
- Ember.js - 一个视图多个布局(已登录/未登录)
- 挖空.js当视图模型的属性重命名时,绑定会断开
- 嵌套依赖主干.js具有 require.js 主干的视图.js导致视图作为对象而不是函数加载
- Vue.js新添加的元素不是反应性的
- YII:如何将参数列表从js传递到控制器,并通过传递另一个列表来调用新视图
- Ember.js新模型elem到视图中的第一个位置
- 将js变量传递给控制器并在ci中构建新视图