Redux的商店服务最终被React App中的各种组件所使用。由它公开的方法(例如dispatch,getState和subscribe)被各种组件(如容器或表示)使用。Redux与React - 正确的方式与组件共享商店
我认为通过这个商店服务的方法是一个重要的设计决定。我看到两种方法,它们是:
1)通过将商店作为道具传递给所有嵌套级别的每个组件。这不是推荐的。
2)使用像react-redux这样的工具,在上下文的帮助下,使存储(状态和调度准确)在任何需要的地方都可用。
我的问题是:为什么不只是在需要的地方导入商店。对于基于SPA的React App,商店将是一个单身人士。嵌套在任何级别的组件都可以简单地导入商店。我们为什么要采用上述两种方法中的任何一种?
在任何嵌套级别的组件:我们可以做这
import store from "path/to/store";
let MyComponent =() => {
let state = store.getState();
return (
<div onClick={() => {
store.dispatch({
type: "SOME_EVENT",
payload: store.somedata
});
}}>{state.dataINeedHere}</div>
);
};
export default MyComponent;
代替
import { connect } from "react-redux";
let MyComponent = ({somedata, onMyAction}) => {
let state = store.getState();
return (
<div onClick={() => {
onMyAction(somedata);
}}>{somedata}</div>
);
};
const mapStateToProps = (state) => {
return {
somedata: state.somedata
}
}
const mapDispatchToProps = (dispatch) => {
return {
onMyAction: (input) => {
dispatch({
type: "SOME_EVENT",
payload: input
});
}
}
}
export default connect(mapStateToProps, mapDispatchToProps)(MyComponent);
在你的“我们能做到这一点”的例子中,什么会导致你的组件在某些状态改变时重新渲染? – azium
我会订阅顶级的状态更改并触发重投 – Vijey
您是否看过mobx/mobx-react?听起来像你所描述的。 – azium