【发布时间】:2018-09-30 04:49:24
【问题描述】:
我想在我的 React-Redux 组件中单击按钮时显示“成功消息”。
我在 reducer 中设置了值,消息按预期显示。问题是,如果我转到另一个页面(例如主页)并返回 /About 页面,它仍然显示成功消息并且没有消失。
如果我转到 /List 页面,则该状态已明确,因为我的减速器正在重置 resetTodoSuccess 值。但是,对我网站中的每条路线都重新设置该值没有意义,而且我认为这不是正确的做法。
您能否建议我将标志 resetTodoSuccess 设置为 false 的最佳方法是什么?
关于Page.js
当resetTodoSuccess 为真时,我会显示一条消息。
export class AboutPage extends Component {
static propTypes = {
resetTodoSuccess: PropTypes.bool.isRequired,
resetTodoItem: PropTypes.func.isRequired
}
onReset = () => this.props.resetTodoItem();
render() {
const { resetTodoSuccess } = this.props;
return (
<Container>
{
resetTodoSuccess &&
<Message message="The items are reset successfully." messageType={MessageType.Success} />
}
<Button color="success" onClick={this.onReset}>Reset Todo Items</Button>
<p className="text-danger">Click here to reset the items of todo. Please becareful that you will lose any added items.</p>
</Container>
)
}
}
const mapStateToProps = (state) => (
{
resetTodoSuccess: state.todo.resetTodoSuccess
}
)
const mapDispatchToProps = dispatch => {
return {
resetTodoItem: () => dispatch(resetTodoItem())
};
};
export default connect(mapStateToProps, mapDispatchToProps)(AboutPage)
TodoReducer.js
const todoReducer = (state = initialState, action) => {
switch (action.type) {
case actionTypes.ADD_TODO_ITEM_SUCCESS: {
return { ...state, addTodoSuccess: true };
}
case actionTypes.LOAD_TODO_SUCCESS:
return { ...state, tasks: action.payload, addTodoSuccess: false, removeTodoSuccess: false, resetTodoSuccess: false };
case actionTypes.REMOVE_TODO_SUCCESS: {
return { ...state, tasks: action.payload, removeTodoSuccess: true };
}
case actionTypes.RESET_TODO_SUCCESS: {
return { ...state, resetTodoSuccess: true };
}
default:
return state;
}
}
PS。我想知道将 React-Redux 流程用于这种功能是否真的正确。因为这个resetTodoSuccess 状态不再对其他组件有用。
也就是说,是否允许在不同的组件中混合使用 React 和 React-Redux 模式来调用异步服务?
【问题讨论】:
标签: reactjs react-redux