【发布时间】:2021-03-08 10:18:01
【问题描述】:
我在我的 react 项目中使用 react-redux,显然,有两种方法可以使用 redux 状态
connect 或 useSelector,
我的 redux 商店每个页面都有一个 reducer,
首页 > homePageReducer
留言页>messagePageReducer
用于身份验证> authReducer
用户博客>blogReducer
关于设置>userSettingsReducer
对于用户的个人资料> userProfileReducer
在我的顶级组件或主组件中,我使用了一个选择器钩子来获取所有减速器,并将减速器作为道具传递给所需的组件
const {home, messages, auth, settings, blogs} = useSelector( (state:RootState) => state)
return(
<main>
<Switch>
<Route exact to={HOME_ROUTE}>
<HomeApp auth={auth} settings={settings} userProfile={userProfile}/>
</Route>
<Route exact to={CHAT_ROUTE}>
<ChatApp auth={auth} messages={messages} userProfile={userProfile}/>
</Route>
<Route exact to={BLOG_ROUTE}>
<BlogApp auth={auth} blogs={blogs} userProfile={userProfile}/>
</Route>
</Switch>
</main>
)
这对我的项目来说是一个好的架构并且不会给我的项目带来性能问题,还是我应该在这些组件中使用connect 或useSelector hook?
什么比较好?
【问题讨论】:
-
connect被认为是仅用于类组件的旧方式。如果您的组件是作为功能组件制作的,那么您不能使用连接,而应该使用钩子。您当前方法的一个问题是,由于您的主要组件是“订阅”状态中的 每个 对象(home、messages、auth、settings、blogs),其中任何一项的更改都会触发完整的重新渲染,即使对于没有更改其值的组件也是如此。 -
所以简而言之,使用 hooks/
useSelector,你的组件本身应该负责从 redux 存储中获取数据,而不是你的主/父组件 -
@nbokmans 我同意你的所有观点,但功能组件可以使用
connect。不过最好使用钩子! -
@Khan 你可以在Redux Style Guide找到所有推荐的最佳实践
-
@LindaPaiste 很有趣,不知道,谢谢你告诉我。
标签: javascript reactjs typescript redux