![](/img/trans.png)
[英]What do you use if you want to have access to a portion of the global state when you are using Redux?
[英]Do you have to declare mapDispatchToProps and mapStateToProps everytime you want to access the state in redux?
我只是在使用 redux 并且我有一个问题是每次我想访问 redux state 时是否必须声明 mapState 和 mapDispatch
我已经设置了 redux 及其商店和动作/动作创建者/类型。 我还使用了 react-redux 库中的 connect HOC function。 我有两个组件,都共享 state 和操作。 每次我想访问这些属性时,我是否必须传递 mapDispatchToProps 和 mapStateToProps 并连接 function ? 我知道有 redux-hooks 可以做到这一点,但我要求没有钩子。 我将在下面提供代码。 谢谢!
// CarContainer
import React from "react";
import { connect } from "react-redux";
import {BUY_CAR, SELL_CAR} from "./carActions";
const buyCar=()=> {
return {
type: BUY_CAR
}
}
const sellCar =()=> {
return {
type: SELL_CAR
}
}
const CarContainer = (props) => {
return (
<div>
<h5>Number of Cars: {props.numOfCars}</h5>
<button onClick={props.buyCar}>Buy Car</button>
<button onClick={props.sellCar}>Sell Car</button>
</div>
)
}
const mapStateToProps = (state) => {
return {
numOfCars: state.numOfCars
}
}
const mapDispatchToProps = (dispatch) => {
return {
buyCar: ()=> dispatch(buyCar()),
sellCar: ()=> dispatch(sellCar())
}
}
export default connect(mapStateToProps, mapDispatchToProps)(CarContainer);
// LoseCar container
import React from "react";
import { connect } from "react-redux";
import { SELL_CAR } from "./carActions";
const sellCar =()=> {
return {
type: SELL_CAR
}
}
const LoseCar = (props) => {
return (
<div>
<h5>Number of Cars: {props.numOfCars}</h5>
<button onClick={props.sellCar}>Sell Car</button>
</div>
)
}
const mapStateToProps = (state) => {
return {
numOfCars: state.numOfCars
}
}
const mapDispatchToProps = (dispatch) => {
return {
sellCar: ()=> dispatch(sellCar())
}
}
export default connect(mapStateToProps,mapDispatchToProps)(LoseCar);
// App Container
import React from 'react';
import CarContainer from "./redux/cars/CarContainer";
import LoseCar from "./redux/cars/LoseCar"
import './App.css';
function App() {
return (
<div className="App">
<CarContainer />
<LoseCar/>
</div>
);
}
export default App;
您可以在一个文件中创建一个连接器,这样您就不必多次编写相同的逻辑。
export const connectCars = connect(mapStateToProps,mapDispatchToProps);
然后在另一个文件中,您可以只使用
export default connectCars(LoseCar);
我不知道我是否正确,但根据React Redux Doc :
1- mapStateToProps
:用于从存储中选择连接组件需要的部分数据。 这样,如果您想将商店的某些部分用作将自行更新的只读变量,您可以为 mapStateToProps 使用mapStateToProps
。
2- mapDispatchToProps
:用于将操作分派到商店。 因此,如果您想更改商店中的任何值,您可以将 go 更改为mapDispatchToProps
。
如果您不与组件内的商店进行交互,则不需要使用它们。 此外,您只能拥有其中之一。 像那样:
如果您不需要读取任何值:
export default connect(null, mapDispatchToProps)(CarContainer);
或者
如果您不需要更改任何值:
export default connect(mapStateToProps, null)(CarContainer);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.