Javascript 数据被复制,输出显示两次。可能传播错误

Javascript 数据被复制,输出显示两次。可能传播错误,javascript,ecmascript-6,redux,Javascript,Ecmascript 6,Redux,这里的输出被复制了2次,我知道它是返回格式。这怎么能解决呢 export const addToDo = (state, action) => { console.log(">>>>>>>>>>>>>>>>>>>>>>>>>>"); const { name, email, phone } = action;

这里的输出被复制了2次,我知道它是返回格式。这怎么能解决呢

 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