Javascript reactjs-如何识别行项目
如何在单击时删除记录(如何识别单击了哪个项/模型并从状态中删除数据)。我是否需要使用React.createClass创建一个nameRecord,或者仅仅使用一个函数就足够了(如果我使用createClass/just函数,reactjs是否以不同的方式跟踪每个记录)Javascript reactjs-如何识别行项目,javascript,reactjs,Javascript,Reactjs,如何在单击时删除记录(如何识别单击了哪个项/模型并从状态中删除数据)。我是否需要使用React.createClass创建一个nameRecord,或者仅仅使用一个函数就足够了(如果我使用createClass/just函数,reactjs是否以不同的方式跟踪每个记录) var namecord=React.createClass({ handleClick:函数(e){ 警报('我的名字是'+this.props.data.name); this.destroy()//我可以删除记录吗 },
var namecord=React.createClass({
handleClick:函数(e){
警报('我的名字是'+this.props.data.name);
this.destroy()//我可以删除记录吗
},
render:function(){
返回{this.props.data.name}
}
});
var people=[{“name”:“king”},{“name”:“Larry”}]
var NameList=React.createClass({
getInitialState:函数(){
返回{
数据:人,
};
},
render:function(){
people=this.state.data.slice(0,5)
返回
名单-
{people.map(函数(person)){
返回儿童
})}
;
}
})
React.renderComponent(
,
document.getElementById('content')
)
React组件不会自行销毁。您应该将事件传播到所有者组件,或者传播到保存数据的组件,例如作为状态。然后修改数据并重新渲染组件
例如:
var nameRecord = React.createClass({
handleClick: function(e){
// propagate event
if (this.props.onDelete) {
this.props.onDelete(this.props.data);
}
},
render: function(){
return <ol onClick={this.handleClick}>{this.props.data.name}</ol>
}
});
var people = [{"name":"king"},{"name":"Larry"}];
var NameList = React.createClass({
getInitialState: function(){
return {
data: people,
};
},
onDelete: function(index) {
// remove element and update state, which causes a rerender
var data = this.state.data.slice()
.splice(this.data.indexOf(person), 1);
this.setState({data: data});
},
render: function(){
var names = this.state.data.map(function(person){
return (
<nameRecord data={person} onDelete={this.onDelete} />
);
}.bind(this))
return (
<div>
List of Names -
<ul>{names}</ul>
</div>
);
}
});
var namecord=React.createClass({
handleClick:函数(e){
//传播事件
if(this.props.onDelete){
this.props.onDelete(this.props.data);
}
},
render:function(){
返回{this.props.data.name}
}
});
var people=[{“name”:“king”},{“name”:“Larry”}];
var NameList=React.createClass({
getInitialState:函数(){
返回{
数据:人,
};
},
onDelete:函数(索引){
//删除元素并更新状态,这会导致重新加载
var data=this.state.data.slice()
.拼接(此数据索引为(人),1);
this.setState({data:data});
},
render:function(){
var names=this.state.data.map(函数(人){
返回(
);
}.绑定(本)
返回(
名单-
{names}
);
}
});
React组件不会自行销毁。您应该将事件传播到所有者组件,或者传播到保存数据的组件,例如作为状态。然后修改数据并重新渲染组件
例如:
var nameRecord = React.createClass({
handleClick: function(e){
// propagate event
if (this.props.onDelete) {
this.props.onDelete(this.props.data);
}
},
render: function(){
return <ol onClick={this.handleClick}>{this.props.data.name}</ol>
}
});
var people = [{"name":"king"},{"name":"Larry"}];
var NameList = React.createClass({
getInitialState: function(){
return {
data: people,
};
},
onDelete: function(index) {
// remove element and update state, which causes a rerender
var data = this.state.data.slice()
.splice(this.data.indexOf(person), 1);
this.setState({data: data});
},
render: function(){
var names = this.state.data.map(function(person){
return (
<nameRecord data={person} onDelete={this.onDelete} />
);
}.bind(this))
return (
<div>
List of Names -
<ul>{names}</ul>
</div>
);
}
});
var namecord=React.createClass({
handleClick:函数(e){
//传播事件
if(this.props.onDelete){
this.props.onDelete(this.props.data);
}
},
render:function(){
返回{this.props.data.name}
}
});
var people=[{“name”:“king”},{“name”:“Larry”}];
var NameList=React.createClass({
getInitialState:函数(){
返回{
数据:人,
};
},
onDelete:函数(索引){
//删除元素并更新状态,这会导致重新加载
var data=this.state.data.slice()
.拼接(此数据索引为(人),1);
this.setState({data:data});
},
render:function(){
var names=this.state.data.map(函数(人){
返回(
);
}.绑定(本)
返回(
名单-
{names}
);
}
});
React文档中的此提示可能有帮助:。React文档中的此提示可能有帮助:。React文档中的此提示可能有帮助:。每个人似乎都建议使用此方法。难道没有办法从传递给单击处理程序的事件对象中获取目标吗?重新呈现整个列表不比在行项目级别销毁它自己/照顾它自己需要很多工作吗。。。还有一种比索引更好的方法来生成唯一id…,这样就可以通过这些唯一id删除行项目…我更新了代码,使其更好一些。这是一种错误的观念,认为重建整个结构太昂贵了。真正昂贵的工作是更新DOM,React计算更新DOM所需的最小操作集。也就是说,如果可以的话,它将简单地重用现有的DOM节点。如果您遇到性能问题,您应该使用组件的shouldComponentUpdate
方法,该方法控制组件是否重新提交。因此,这与主干完全不同,如果我删除一行,我将有一个模型id(唯一id)我可以只删除关联的视图/删除dom元素…而不是再次创建表..所以你有一个表和100行,如果我删除1行或添加1行,我基本上会重新创建整个表..还是我丢失了something@coool:是的,实际上,您必须向数组中的每个元素添加一个唯一的键
,否则React将发出抱怨。但是,由于我对您的数据了解不够,所以我无法真正提出任何建议(您可以执行key={person.name}
)。需要理解的重要部分是
不会呈现元素。它只是创建了一个非常轻的容器。然后,当React将要渲染元素时,它会将它们与现有的虚拟DOM进行比较。如果设置正确(例如使用shouldComponentUpdate
),React甚至不会调用渲染…每个人似乎都建议使用此方法。难道没有办法从传递给单击处理程序的事件对象中获取目标吗?重新呈现整个列表不比在行项目级别销毁它自己/照顾它自己需要很多工作吗。。。还有一种比索引更好的方法来生成唯一id…,这样就可以通过这些唯一id删除行项目…我更新了代码,使其更好一些。这是一种错误的观念,认为重建整个结构太昂贵了。真正昂贵的工作是更新DOM,React计算更新DOM所需的最小操作集。也就是说,如果可以的话,它将简单地重用现有的DOM节点。如果遇到性能问题,应使用组件的