首页 > 解决方案 > Redux 中的操作创建者给出错误:TypeError: Cannot read property 'filter' of undefined

问题描述

我有一份客户名单。添加新客户端时,我希望操作创建者检查客户端名称是否已存在,如果存在,则显示错误。我用来确定具有该名称的客户端是否已经存在的 filter() 方法不起作用......我做错了什么?

行动:

export const addClient = (client) => {
    return(dispatch, getState) => {
        console.log('state: ' + JSON.stringify(getState())); 
        let clientList = getState().clientList; 
        console.log('clientList: ' + clientList); 
        if (clientList && clientList.map( client => { 
            return client.name;
        }).includes(client.name)) 
            { return ( dispatch({type: 'ADD CLIENT ERROR'}) ) }
        else { dispatch({type: 'ADD CLIENT', client}) }
    }
}

减速器:

const initState = {
  clientList: [],
  clientErr: null,
};

const clientReducer = (state = initState, action) => {
  switch (action.type) {
    case 'ADD CLIENT ERROR':
      console.log('add client failed');
      return {
        ...state,
        clientErr: 'A client with this exact name already exists, please try again.',
      };
    default:
      return state;
  }
};

export default clientReducer;

添加客户端的按钮工作正常,调度被发送到操作,但这就是我得到错误的地方。

安慰

标签: reactjsreduxactionreducers

解决方案


getState 是一个 Redux 方法,在这里您尝试通过点符号访问对象属性。您可以在这里做的是解构从此方法返回的值,如下所示:

const {
  clients: { clientsList },
} = getState();

然后在你的 if 语句中过滤它。


推荐阅读