redux - 在 Redux 中从组件向 Action Creator 传递数据
问题描述
我试图通过将级别 13 传递给我的动作创建者来更改缩放级别。
但是得到这个错误:
错误:给定操作“ZOOM_SELECTED”,减速器“缩放”返回未定义。要忽略某个操作,您必须显式返回之前的状态。如果你希望这个 reducer 不保存任何值,你可以返回 null 而不是 undefined。
你知道如何改变当前状态,将新的缩放级别传递给我的动作创建者吗?
render() {
console.log(this.props.zoom)
return (
<div>
<Map className='map' center={this.props.mapCenter} zoom={this.props.zoom}>
<TileLayer
attribution='&copy <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"
/>
<Marker position={this.props.mapCenter}>
<Popup>
A pretty CSS3 popup. <br /> Easily customizable.
</Popup>
</Marker>
</Map> <button onClick={() => this.props.selectZoom((13))} >Ändra zoom</button>
</div >
)
}
};
const mapStateToProps = (state) => {
return {
zoom: state.zoom,
mapCenter: state.mapCenterPosition
}
};
const mapDispatchToProps = dispatch => {
return {
selectZoom: () => dispatch(selectZoom())
}
}
export default connect(mapStateToProps, mapDispatchToProps)(MapComponent); ```
动作创建者
export const selectZoom = (zoom) => {
console.log('action',zoom)
return {
type: 'ZOOM_SELECTED',
payload: zoom
};
};
减速器
const zoomReducer = (state = 8, action) => {
if(action.type === 'ZOOM_SELECTED') {
return action.payload;
} else {
return state;
}
};
解决方案
问题在于mapDispatchToProps
- 您没有将缩放传递给回调中的操作。你需要这样做:
const mapDispatchToProps = dispatch => {
return {
selectZoom: (zoom) => dispatch(selectZoom(zoom))
}
}
没有它,不会传递任何参数,并且有效负载的值为undefined
. 由于您直接在 reducer 中返回有效负载,因此它看起来好像没有返回任何内容。
推荐阅读
- javascript - 由于高度限制 14400,jsPDF pdf 未捕获最后的 html 内容
- flutter - Flutter:如何使 ClipRRect 显示图像而不是透明颜色?
- mysql - 赛马数据库;如何以正确的方式做到这一点?
- python - 如何避免 Pandas groupby 导致数据丢失
- docker - elasticsearch节点恢复后会同步数据吗?
- arrays - 二维数组中所有元素的总和。在 C 中
- django - 如何将用户模型连接到 Django 中的自定义模型?
- android-source - 可以导入android app的gradle构建AOSP项目
- docusignapi - Docusign Connect - 有没有办法配置 webhook,以便它使用 Content-Type“application/xml”将数据发布到我的 api?
- uart - 读取 2 个字节长度的 UART 问题