React-Redux componentWillReceiveProps 未使用 api 数据触发
React-Redux componentWillReceiveProps not triggered using api data
我不确定这是否是正确的做事方式,或者它是否可能,因此我的问题在这里。
我在我的项目中使用了 react-redux、redux-thunk、json-server(用于虚拟数据)和 typescript。通过 1 api 调用,我用我的应用程序的所有数据更新了 'data' reducer。此数据通过 combineReducers 与其他 reducer 一起使用:
Redux tree
我想做的是将 data.labels 作为道具映射到我的组件中。一旦整个 api 调用完成,并且 data.labels 被填满,我想将这些数据显示给我的前端。但是,我注意到当我的数据 api 调用完成时,根本不会触发 componentWillReceiveProps。如果我将整个 'data' 道具而不是 'data.labels'.
附加到我的组件,它确实会更新
减速器:
case Actions.RECEIVE:
return {
...state,
labels: action.payload.labels,
defaultLinks: action.payload.defaultLinks,
customLinks: action.payload.customLinks
};
组件:
function mapStateToProps(state: any) {
return {
labels: state.data.labels, // This will not trigger componentWillReceiveProps
function mapStateToProps(state: any) {
return {
data: state.data, // This will trigger componentWillReceiveProps
关于如何在不将整个数据对象作为 prop 注入的情况下使其工作的任何提示?
编辑
在使用完整 'data' 的情况下,在提取数据之前在 componentWillReceiveProps 中记录 data.labels 时,我得到一个空的标签数组。成功获取数据后,我的日志显示了一个包含 x 个标签的数组。
以下是我使用的界面:
数据接口(redux 存储中的结构,以 'data' 作为父级):
interface Data {
labels: Label[];
defaultLinks: DefaultLink[];
customLinks: CustomLink[];
request: boolean;
failure: boolean;
}
我的组件中使用的道具接口:
interface Props {
labels: Label[];
...; // Other stuff
}
您可能正在寻找选择器模式:gist.github.com/abhiaiyer91/aaf6e325cf7fc5fd5ebc70192a1fa170 often used in combination with reselect: github.com/reactjs/reselect#reselect
主要优势是您可以将状态的形状与道具的形状分离开来。
我不确定这是否是正确的做事方式,或者它是否可能,因此我的问题在这里。
我在我的项目中使用了 react-redux、redux-thunk、json-server(用于虚拟数据)和 typescript。通过 1 api 调用,我用我的应用程序的所有数据更新了 'data' reducer。此数据通过 combineReducers 与其他 reducer 一起使用: Redux tree
我想做的是将 data.labels 作为道具映射到我的组件中。一旦整个 api 调用完成,并且 data.labels 被填满,我想将这些数据显示给我的前端。但是,我注意到当我的数据 api 调用完成时,根本不会触发 componentWillReceiveProps。如果我将整个 'data' 道具而不是 'data.labels'.
附加到我的组件,它确实会更新减速器:
case Actions.RECEIVE:
return {
...state,
labels: action.payload.labels,
defaultLinks: action.payload.defaultLinks,
customLinks: action.payload.customLinks
};
组件:
function mapStateToProps(state: any) {
return {
labels: state.data.labels, // This will not trigger componentWillReceiveProps
function mapStateToProps(state: any) {
return {
data: state.data, // This will trigger componentWillReceiveProps
关于如何在不将整个数据对象作为 prop 注入的情况下使其工作的任何提示?
编辑
在使用完整 'data' 的情况下,在提取数据之前在 componentWillReceiveProps 中记录 data.labels 时,我得到一个空的标签数组。成功获取数据后,我的日志显示了一个包含 x 个标签的数组。
以下是我使用的界面: 数据接口(redux 存储中的结构,以 'data' 作为父级):
interface Data {
labels: Label[];
defaultLinks: DefaultLink[];
customLinks: CustomLink[];
request: boolean;
failure: boolean;
}
我的组件中使用的道具接口:
interface Props {
labels: Label[];
...; // Other stuff
}
您可能正在寻找选择器模式:gist.github.com/abhiaiyer91/aaf6e325cf7fc5fd5ebc70192a1fa170 often used in combination with reselect: github.com/reactjs/reselect#reselect
主要优势是您可以将状态的形状与道具的形状分离开来。