gpt4 book ai didi

javascript - 如何使用 react 中的删除按钮从列表中删除项目?

转载 作者:行者123 更新时间:2023-12-03 05:20:15 25 4
gpt4 key购买 nike

我正在使用添加按钮生成动态列表。我能够生成动态列表。但是每个li<中还存在删除按钮。我想在按下删除按钮时删除该项目。我也做了一个 action 以及 redux。首先,我不知道如何在动态生成的列表上绑定(bind)点击事件。我是当用户按下删除按钮时出现错误

这是我的代码 https://plnkr.co/edit/JEG6o4JCBIQWAt2A4S3r?p=preview//代码放在这里

const { createStore, bindActionCreators, applyMiddleware,combineReducers } = Redux;
const { Provider, connect } = ReactRedux;
const thunk = window.ReduxThunk.default;


const first_redux =function(state =[] ,action){
switch (action.type){
case 'ADD_ITEM':
return [
...state,
action.payload
];
case 'DELETE_ITEM':
var index = state.indexOf(action.payload);
return state.slice(index,1);
default :
return state

}
}

const actions ={
addItem :function(item){
return {
type :"ADD_ITEM",
payload :item
}
} ,
deleteItem :function(item){
return {
type :"DELETE_ITEM",
payload :item
}
}

}
var combindReducer = combineReducers({
item:first_redux
})

const store = createStore(combindReducer);

class First extends React.Component {
constructor (props){
super(props);
this.state = {
names :[],
username :''
}
this.changeEv =this.changeEv.bind(this);
this.addName =this.addName.bind(this);
this.handle =this.handle.bind(this);

}
changeEv(e){
this.setState({
username : e.target.value
})
}
addName(){
if(this.state.username !== ''){
this.props.add(this.state.username)
this.setState({
username : ''
})
}
}
handle(){
alert('---')
}

render() {
const data =[{"name":"test1"},{"name":"test2"}];
var listItems = this.props.names.map(function(d, idx){
return (<li key={idx}><span>{d}</span><button onClick={this.handle}>delete</button></li>)
})
return (
<div>
<input type="text" onChange ={this.changeEv} value={this.state.username}/>
<button onClick={this.addName}>add</button>
{listItems}
</div>
);
}
}

function mapStateToProps(state){
console.log('=================');
console.log(state);
return {
names: state.item,

};
console.log(this.state);

}

function mapDispatchToProps(dispatch){
return {
add:bindActionCreators(actions.addItem,dispatch)
}
}
const Appcontainer =connect(mapStateToProps,mapDispatchToProps)(First)

ReactDOM.render(
<Provider store ={store}>
<Appcontainer/>
</Provider>
,document.getElementById('root'));

最佳答案

问题:

删除按钮时出现错误,因为您尝试在 this.props.names.map 中访问的 this 不是组件的 this。

解决方案:

var listItems = this.props.names.map((d, idx) => {
return (<li key={idx}><span>{d}</span><button onClick={this.handle}>delete</button></li>)
})

由于您使用的是 ES6,因此可以使用 arrow functions提供词法范围。我已经更新了你的代码。看看here

关于javascript - 如何使用 react 中的删除按钮从列表中删除项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41416726/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com