Reactjs Redux中的操作创建者给出错误:TypeError:无法读取属性';过滤器';未定义的

Reactjs Redux中的操作创建者给出错误:TypeError:无法读取属性';过滤器';未定义的,reactjs,redux,action,reducers,Reactjs,Redux,Action,Reducers,我有一份客户名单。添加新客户端时,我希望操作创建者检查客户端名称是否已存在,如果已存在,则显示错误。我正在使用的filter()方法用于确定具有该名称的客户端是否已存在,但该方法不起作用。。。我做错了什么 行动: export const addClient = (client) => { return(dispatch, getState) => { console.log('state: ' + JSON.stringify(getState()));

我有一份客户名单。添加新客户端时,我希望操作创建者检查客户端名称是否已存在,如果已存在,则显示错误。我正在使用的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;
添加客户机的按钮工作正常,分派被发送到操作,但这就是我得到错误的地方


更改逻辑以查找名称是否存在:

let clientList = getState().clientList
if (clientList && clientList.map( client => {
      return client.name;
    }).includes(client.name)
   )

getState是一个Redux方法,在这里您试图通过点表示法访问对象属性。在这里,您可以按如下方式分解此方法返回的值:

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

然后在if语句中对其进行过滤。

能否显示操作的console.log(getState)?getState(){if(isDispatching){抛出新错误('在执行减速机时,您不能调用store.getState()。'+'减速机已将状态作为参数接收。'+'Pas…如您在此处看到的getState()是一个方法,而不是一个对象噢!我也可以执行getState().clientList.filter()?您可以从getState()将返回的对象中解构clientList->
const{clientList}=getState();
然后在您的if语句中对其进行过滤我不知道包含()是一个方法,这很酷。但是viciousP在上面帮助我认识到getState实际上是一个方法,getState(),所以我仍然使用它得到错误,map是未定义的。让clientList=getState().clientList;if(clientList&&clientList.map(client=>{return client.name;})。includes(client.name))我刚刚编辑了上面的代码并包含了您的代码段。我不再收到错误,但是错误不会记录。它仍然会添加新客户端,即使已经存在同名的客户端。请参阅console.log输出以查找问题的console.log('state:'+JSON.stringify(getState());让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})}你应该使用clients.ClientsList这在很大程度上是有效的,但我的代码中有一个bug。当我输入一个客户端名称并添加它时,它会添加客户端。然后,当我背靠背地使用相同的客户端名称时,它仍然会添加它,但是如果我连续第三次这样做,它会说添加客户端失败。因此,它只在sa第三次使用后才有效我的名字被添加了。我想这是因为第一次它添加了名字,但是第二次它的名字===null,所以它没有把它读为已经存在。为什么第二次它是null呢?成功了!希望我能给两个复选标记,但我会给他,因为他给了我更多的代码。但是没有你的代码,我就做不到了,谢谢你u!很高兴听到它正在工作:)希望您在这里学到了一些关于调试的知识