【发布时间】:2020-06-05 19:32:45
【问题描述】:
我只是在使用redux,我有一个问题,每次我想访问redux状态时是否必须声明mapState和mapDispatch
我已经设置了 redux 及其商店,以及动作/动作创建者/类型。我还使用了 react-redux 库中的 connect HOC 函数。我有两个组件,都共享状态和动作。每次我想访问这些属性时,是否也必须传递 mapDispatchToProps 和 mapStateToProps 和 connect 函数?我知道有 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;
【问题讨论】:
-
您可以使用重新选择来防止重复代码,重复实现您所在状态的位置信息,并假设它的形状对于大型应用程序来说是非常糟糕的设计。 mapDispatch 可以更简单,你可以只传递一个对象:
const container = connect(selectProps, {buyCar, sellCar}); const ConnectedCarContainer = container(CarContainer); const LoseCarContainer = container(LoseCar)
标签: javascript reactjs redux react-redux state