当前位置: 首页 > 面试题库 >

ReactJS如何从列表中删除项目

戚飞虎
2023-03-14
问题内容

我有创建<li>元素的代码。我需要单击一次删除一个元素。对于每个元素,我都有Delete button。我了解我需要一些功能来通过删除项目id。如何使用此功能删除ReactJS中的元素?我的代码:

class TodoApp extends React.Component {
    constructor(props) {
        super(props);
        this.handleChange = this.handleChange.bind(this);
        this.handleSubmit = this.handleSubmit.bind(this);
        this.state = {items: [], text: ''};
    }

    render() {
        return (
            <div>
                <h3>TODO</h3>
                <TodoList items={this.state.items} />
                <form onSubmit={this.handleSubmit}>
                    <input onChange={this.handleChange} value={this.state.text} />
                    <button>{'Add #' + (this.state.items.length + 1)}</button>
                </form>
            </div>
        );
    }

    handleChange(e) {
        this.setState({text: e.target.value});
    }

    handleSubmit(e) {
        e.preventDefault();
        var newItem = {
            text: this.props.w +''+this.props.t,
            id: Date.now()
        };
        this.setState((prevState) => ({
            items: prevState.items.concat(newItem),
            text: ''
        }));
    }

    delete(id){          // How that function knows id of item that need to delete and how to delete item?
        this.setState(this.item.id)
    }
}

class TodoList extends React.Component {
    render() {
        return (
            <ul>
                {this.props.items.map(item => (
                    <li key={item.id}>{item.text}<button onClick={this.delete.bind(this)}>Delete</button></li>
                ))}
            </ul>
        );
    }
}

问题答案:

您正在父级组件中管理数据并在子级组件中呈现UI,因此要从子级组件中删除项目,您需要将一个函数与数据一起传递,从子级中调用该函数并在父级组件内部传递列表项的任何唯一标识符使用该唯一标识符删除项目。

步骤1: 将父组件的函数与数据一起传递,如下所示:

<TodoList items={this.state.items} _handleDelete={this.delete.bind(this)}/>

步骤2:delete在父组件中定义函数,如下所示:

delete(id){
    this.setState(prevState => ({
        data: prevState.data.filter(el => el != id )
    }));
}

第三步: 使用this.props._handleDelete()以下命令从子组件中调用该函数:

class TodoList extends React.Component {

    _handleDelete(id){
        this.props._handleDelete(id);
    }

    render() {
        return (
            <ul>
                {this.props.items.map(item => (
                    <li key={item.id}>{item.text}<button onClick={this._handleDelete.bind(this, item.id)}>Delete</button></li>
                ))}
            </ul>
        );
    }
}

检查以下工作示例:

class App extends React.Component{

   constructor(){

      super();

      this.state = {

        data: [1,2,3,4,5]

      }

      this.delete = this.delete.bind(this);

   }



   delete(id){

      this.setState(prevState => ({

          data: prevState.data.filter(el => el != id )

      }));

   }



   render(){

      return(

          <Child delete={this.delete} data={this.state.data}/>

      );

   }

}



class Child extends React.Component{



   delete(id){

       this.props.delete(id);

   }



   render(){

      return(

         <div>

           {

              this.props.data.map(el=>

                  <p onClick={this.delete.bind(this, el)}>{el}</p>

              )

           }

         </div>

      )

   }

}



ReactDOM.render(<App/>, document.getElementById('app'))


<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>

<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>



<div id='app'/>


 类似资料:
  • 我使用firebase数据库和recycler视图。我使用push()向firebase添加了一个项目列表;命令使用push()时,firebase为每个添加的项目创建唯一的id。 现在,我想删除项目点击删除按钮,但当我尝试删除价值();函数到我的数据库参考,它删除所有存储库,而不仅仅是项目。 这就是我现在所拥有的: 从Firebase读取数据的片段 我的onClick按钮 适配器包com。享受应

  • 问题内容: 在遍历列表时,我想根据条件删除列表中的项。请参见下面的代码。 这给了我一个例外。 如何才能做到这一点? 问题答案: 您需要使用和调用上,而不是使用循环。

  • 问题内容: 我有表,我想将它做成。我该怎么办? 问题答案: Python清单 list.pop(索引) 删除列表[索引] 这些都将修改您的原始列表。 其他人建议使用切片: 复制清单 可以返回一个子集 另外,如果要执行许多pop(0),则应查看collections.deque 从列表的左端提供更高的性能

  • 问题内容: 我想从列表中删除重复项,但我无法正常工作: 问题答案: 如果该代码不起作用,则可能是你未在该类上正确实现。 大概有一些钥匙(我们称之为)可以唯一地标识一个客户。例如 的适当定义equals(Object)如下所示: 为了完整起见,你还应该实现hashCode两个Customer相等的对象将返回相同的哈希值。hashCode上述定义的匹配项为equals: 还值得注意的是,如果列表很大,

  • 我有以下代码: 我试图遍历列表中的每个对象,根据条件删除一个项目,并保持循环,直到所有项目都被删除。 当我在intellij中运行这个时,我得到了以下错误: 我搜索了这个问题,找到了这个解决方案。在此处输入链接描述 当我更改代码时,它变成了: 但是,现在我收到以下错误: 我找到了这个错误的答案,但老实说,它并没有为我澄清任何事情。我如何才能从列表中删除该对象?

  • 问题内容: 我将如何使用python检查列表并删除所有重复项?我不需要指定重复项是什么- 我希望代码找出是否存在重复项,如果有则将其删除,每个重复项仅保留一个实例。如果列表中有多个重复项,它也必须起作用。 例如,在下面的代码中,列表lseparatedOrbList有12个项目-一项被重复六次,一项被重复五次,并且只有一个实例。我希望它更改列表,因此只有三项-每一项,并且它们之前出现的顺序相同。我