【发布时间】:2020-08-14 15:20:54
【问题描述】:
如果使用 redux 更改了另一个组件的状态,我有一个组件应该更新,但事实并非如此。
在 mapStateToProps 内部,redux 操作会返回正确的值。
import React, {Component} from "react";
import './DashboardContent.scss';
import * as entries from '../../../assets/demo.json';
import CategoryHeader from "./CategoryHeader/CategoryHeader";
import NoContent from "../../../shared/NoContent/NoContent";
import UnsortedList from "./UnsortedList/UnsortedList";
import {connect} from "react-redux";
class DashboardContent extends Component {
state = {
activeCategory: this.props.activeCategory
};
componentDidUpdate(prevProps, prevState, snapshot) {
console.log(this.props.activeCategory)
}
render() {
return (
<div>
...
</div>
)
}
}
const mapStateToProps = state => {
console.log(state);
return {
activeCategory: state.category
}
};
export default connect(mapStateToProps)(DashboardContent);
在另一个组件内部调度 - 当它被执行时,第一个组件的状态 activeCategory 将变为 some value:
dispatch(changeCategory('some value'))
Actions.js
// Action types
const CHANGE_CATEGORY = 'CHANGE_CATEGORY'
// Action creators
export const changeCategory = (category) => {
return {
type: CHANGE_CATEGORY,
category
}
}
减速器.js
const initialState = {
activeCategory: 'all'
};
export const reducer = (state = initialState, action) => {
console.log('reducer', state, action);
if (action.type === 'CHANGE_CATEGORY') {
return action.category
}
return state;
};
【问题讨论】:
-
componentDidUpdate中的console.log是否显示新值? -
将它添加到主类时会发生什么:(class DashboardContent extends Component) { constructor() { super();这个.props = 0; }
-
目前您只将状态的初始值设置为
props.activeCategory。使用componentDidUpdate来检查新的道具并更新那里的状态,或者使用getDerivedStateFromProps代替,目的相同。 -
@pawel 不,很遗憾没有。
-
@kbo
componentDidUpdate在 redux 状态更新时不会运行。
标签: javascript reactjs redux react-redux