Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript reactjs-如何识别行项目_Javascript_Reactjs - Fatal编程技术网

Javascript 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()//我可以删除记录吗 },

如何在单击时删除记录(如何识别单击了哪个项/模型并从状态中删除数据)。我是否需要使用React.createClass创建一个nameRecord,或者仅仅使用一个函数就足够了(如果我使用createClass/just函数,reactjs是否以不同的方式跟踪每个记录)

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节点。如果遇到性能问题,应使用组件的