reactjs - 对 mapStateToProps 感到困惑
问题描述
我正在尝试让 redux 与我的应用程序一起正常工作。它似乎在某种程度上起作用。但是,当返回数据时,渲染函数似乎没有更新。
在尝试对此进行测试时,我做了以下事情:
const mapStateToProps = (state, ownProps) => {
console.log(state.correct_property_name)
console.log(state)
return {
data: state.correct_property_name
};
};
在这种情况下,console.log forcorrect_data_name
返回一个空数组:[]。调度似乎根本没有被调用。
但是,如果我将上面代码中的最后一行更改为具有不正确的属性名称,console.log 确实可以工作,调用 dispatch,但我的渲染函数不会重新加载:
const mapStateToProps = (state, ownProps) => {
console.log(state.correct_property_name)
console.log(state)
return {
data: state.wrong_property_name
};
};
问题:
为什么将最后一行更改为错误的属性名称会突然导致 console.log 显示数据?
如果有用的话,这里是文件中的剩余行:
const mapDispatchToProps = (dispatch, ownProps) => ({
fetchData() {
dispatch(mySpecialActions.fetchMySpecialData());
}
});
export default connect(mapStateToProps, mapDispatchToProps)(MyClassName);
行动:
import Axios from 'axios';
const apiUrl = '/api/my_data/';
export const fetchMySpecialDataSuccess = (correct_property_name) => {
return {
type: 'FETCH_MY_SPECIAL_DATA_SUCCESS',
correct_property_name
}
};
export const fetchMySpecialData = () => {
console.log("TEST ONE")
return (dispatch) => {
console.log("DISPATCH")
return Axios.get(apiUrl)
.then(response => {
console.log("DATA")
dispatch(fetchMySpecialDataSuccess(response.data))
})
.catch(error => {
console.log("ERROR")
console.log(error)
throw(error);
});
};
};
仅当我将主文件中的最后一行设置为 . 时,才会显示操作文件中的注释data: state.incorrect_property_name
。对我来说,这意味着当我指定正确的属性名称时它甚至没有调用该操作。但是当我指定一个假的属性名称时会调用该操作。
减速器:
import * as actionTypes from '../actions/actionTypes'
export const mySpecialDataReducer = (state = [], action) => {
switch (action.type) {
case actionTypes.FETCH_MY_SPECIAL_DATA_SUCCESS:
return action.correct_property_name;
default:
console.log("DEFAULT STATE")
return state;
}
};
解决方案
推荐阅读
- android - 如何根据条件为视图设置边距 - Android
- python - 如何使用 Python 将文本消息从 raspberrypi 1 发送到 raspberrypi2
- r - 根据定义为数字名称的列子集过滤 NA
- flutter - Flutter,在 SliverFillRemaining 中使用 FutureBuilder
- javascript - 我可以创建一个 chrome 扩展,当我转到某些 url 时,它将重定向到我计算机上的 html 文档?
- angularjs - Angular JS 中的空白自定义指令,我指的是这个 https://www.youtube.com/watch?v=R_okHflzgm0
- html-table - 如何使 ag-Grid 表响应以使标题和行被转置?
- ssl - 在使用 TestCafe 时尝试登录 gmail
- javascript - GlobalContext 未在类组件中更新
- vue.js - 仅在 v-for 中显示关联数据