reducer返回null(对具有路由器和参数的redux进行响应)

问题描述 投票:-1回答:1

我有一个简单的商店,在reducer上有一个getall和getbyid

const initstate = {
   allobjects: [],
   object: {}
}

switch (action.type) {
    case Constant.GET_OBJECT:
      const object = state.allobjects.find(o => o.id === action.payload)
      return {
         ...state,
         object
      }
    case Constant.GET_ALL:
      const allobjects = action.payload
      return {
          ...state,
          allobjects
      }
}

我有两个组成部分:

// ObjectsList

export const ObjectList = ({ objects}) => {

  useEffect(() => {
      // execute action to getobjects
    }, []) 
  return (
    <>
      {
        objects.map(o => > { <div>o.name</div>})
      }
    </>
  )
}

// mapstatetoprops return objects from init state
// mapdispatchtoprops that calls getobjects

export default connect(ObjectsList);


// Object

const Object = () => {
   const { obj_id } = userParams()
   useEffect(() => {
      // execute action to getobjbyid
    }, [])

   return (<div>selected {obj.name}</div>)
}

// mapstatetoprops return obj from init state
// mapdispatchtoprops that calls getobjectbyid

export connect(Object);

然后,我使用反应路由器dom在身体的这两个组件之间切换。

const Container = () => {
  return (
     <>
         <Router exact path='/' component={ObjectsList} />
         <Router exact path='/:obj_id' component={Object} />
     </>
  )
}

如果我到达路径'/',我将拥有对象列表,但是如果我到达'/:obj_id'路径,它将把我的对象属性(从初始化状态)设置为null / [] 。只有当我访问“ /”路由并在应用上具有触发“ /:obj_id”路由的链接时,它才会为空。

我的问题是,直接进入/ obj_id路由而不必从objectslist组件加载对象列表的最佳方法是什么?

reactjs redux react-redux react-router
1个回答
0
投票

首先,订阅redux是错误的。实际语法:connect()(Object)

© www.soinside.com 2019 - 2024. All rights reserved.