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