Javascript 数据被复制,输出显示两次。可能传播错误
这里的输出被复制了2次,我知道它是返回格式。这怎么能解决呢Javascript 数据被复制,输出显示两次。可能传播错误,javascript,ecmascript-6,redux,Javascript,Ecmascript 6,Redux,这里的输出被复制了2次,我知道它是返回格式。这怎么能解决呢 export const addToDo = (state, action) => { console.log(">>>>>>>>>>>>>>>>>>>>>>>>>>"); const { name, email, phone } = action;
export const addToDo = (state, action) => {
console.log(">>>>>>>>>>>>>>>>>>>>>>>>>>");
const { name, email, phone } = action;
const tempTodo = state.data;
console.log("====================================");
return {
data: [...tempTodo, { name: name, email: email, phone: phone }]
};
};
//这是给商店的
const mapDispatchToProps = dispatch => {
return bindActionCreators(
{
addToDos: (name, email, phone) =>
dispatch(toDoActions.addToDo(name, email, phone)),
toggleToDo: (index, name, email, phone) =>
dispatch(toDoActions.toggleToDo(index, name, email, phone))
},
dispatch
);
};
//这是点击按钮功能
onButtonClick()
{
this.props.addToDos(name, email, phone);
}
//减速器出口
export const reducer = createReducer(INITIAL_STATE, {
[Types.ADD_TO_DO]: addToDo,
});
试试这个:
export const addToDo = (state, action) => {
console.log(">>>>>>>>>>>>>>>>>>>>>>>>>>");
const { name, email, phone } = action;
const tempTodo = state.data || [];
console.log("====================================");
let newData = tempTodo;
const duplicate = tempTodo.find(todo => todo.name === name && todo.email === email && todo.phone ==== phone);
if(!duplicate) {
newData = [...tempTodo, { name: name, email: email, phone: phone }]
}
return {
data: newData
};
};
你能把代码放在呼叫addTodo(所有地方…)的地方吗?试试:
数据:[].concat(testodo,{name:name,email:email,phone:phone})
重复你的意思是,另一个同名的todo,email和phone?@lvaroTouzón我已经记录了,这个函数只被调用了一次:)下面的答案对我来说很好。。谢谢你的输出@DrewReese我肯定从你那里学到了很多东西,并会记住未来。所以,有些东西正在再次添加相同的待办事项或发送两次操作。这只是防止添加副本。我理解这是一种黑客行为。。有东西又在添加相同的待办事项。。但我很确定动作只会触发一次,因为当我记录reducer的输出时,它不是以同步方式进行的,就像如果同一个reducer被调用了两次,那么记录是以系统方式进行的,但在这种情况下不是这样。。使用spread运算符后,可能会对数据进行相加up@DrewReese如果你有更好的答案,我仍然在等待你的回答duplicacy@RishavKumar我们需要看到更多的代码来获得更好的上下文。我只是想指出,这个解决方案只是一种绷带,但很高兴它对你有效。更新了我的问题@DrewReese