【问题标题】:ReactJS todo list app remove functionReactJS 待办事项列表应用删除功能
【发布时间】:2018-08-19 16:07:25
【问题描述】:

这是一个非常简单的待办事项列表应用程序,这是我的练习代码,您可以看到我们有一个列表组件来显示项目;当用户通过提交功能输入新数据时,将添加新项目。

这次我试图在点击 li 中的 span 时删除项目,我认为我做错了。

我们如何将该事件附加到列表中?

这是我的 App.js:

import React, {Component} from 'react';
import './App.css';
import List from "./components/List"

class App extends Component {
    constructor(props) {
        super(props);

        this.state = {
            term: '',
            items: [],
            remove: function () {
            }
        }
    }

    onChange = (e) => {
        this.setState({term: e.target.value})
    };

    onSubmit = (e) => {
        e.preventDefault();
        this.setState({
            items: [...this.state.items, this.state.term]
        })
    };

    removeItem = (item)=>{
        this.setState({
            items: this.state.items.splice(this.state.items.indexOf(item),1)
        })

    };
    render() {
        return (
            <div className="App">
                <form className="App" onSubmit={this.onSubmit}>
                    <input value={this.state.term}  onChange={this.onChange}/>
                    <button>submit</button>
                </form>
            <List items={this.state.items}  />
            </div>
        );
    }
}

export default App;

我的 List.js 组件:

import React from "react"
import App from "../App";

const listyle = {
    color: 'red'
};

const red = {
    backgroundColor : 'red'
};

const List = (props) => {
    var val = props.items.map(function (data, index) {
        return <li style={listyle} key={index}>{data}<span style={red} onClick={props.remove(data)}>X</span></li>
    });
    return <ul>{val}</ul>
};

export default List;

【问题讨论】:

  • 您没有将删除功能传递给您的 List 组件?

标签: javascript reactjs


【解决方案1】:

您必须将removeItem 函数传递给List 组件,并将函数传递给项目onCLick

App.js

<List items={this.state.items} onRemove={this.removeItem} />

List.js

// ...
const List = (props) => {

    var val = props.items.map(function (data, index) {
        return <li style={listyle} key={index}>{data}<span style={red} onClick={() => props.onRemove(data)}>X</span></li>
    });

    return <ul>{val}</ul>
};
// ...

【讨论】:

  • 为什么当我尝试删除一个项目时,除了第一个项目之外的所有项目都会删除?
  • 问题是this.state.items.splice 改变了原始数组并返回删除的项目。使用this.state.items.filter(i =&gt; i !== item) 将按预期工作。演示:codepen.io/anon/pen/XPradp?editors=0010
  • 是的.. 谢谢
猜你喜欢
  • 2020-11-28
  • 2019-05-05
  • 2020-06-06
  • 1970-01-01
  • 2021-07-03
  • 2019-10-31
  • 2020-04-17
  • 2021-06-09
  • 1970-01-01
相关资源
最近更新 更多