reactjs - dispatch 什么都不做
问题描述
动作调度不起作用,功能起作用,我得到了 console.log 但商店没有改变。有任何想法吗?
import React from 'react';
import { connect } from 'react-redux';
import { NavLink } from 'react-router-dom';
import RemoveTodo from './RemoveTodo';
import { remove } from '../actions/Todo';
import { store } from '../app';
class TodosSummary extends React.Component {
constructor(props) {
super(props);
}
onDelete = ({id}) => {
store.dispatch(remove({id}))
console.log(store.getState());
};
render () {
return (
<ul>
{this.props.target.map(({todo, significance, id}) => {
return (
<li
key={id}>{todo} - impact is {significance}
<button onClick={this.onDelete}>Remove</button>
</li>
);
})}
</ul>
</div>
);
}
};
const mapStateToProps = (state) => {
return {
target: state.target
}; };
export default connect(mapStateToProps)(TodosSummary)
这是动作,获取 todo id
export const remove = ({id}) => ({
type: 'REMOVE_TODO',
id
});
这就是减速器,过滤状态并带回过滤后的数组
const todosReducer = (state = todosReducerDefaultState, action) => {
switch(action.type) {
case 'ADD_TODO':
return [
...state,
action.target
];
case 'REMOVE_TODO':
return (
state.filter(({ id }) => id !== action.id)
);
解决方案
我看到你想访问target
里面的财产state
。所以,reducer 应该是这样的:
case 'ADD_TODO':
return {
...state,
target: [...state.target, action.target]
};
case 'REMOVE_TODO':
return {
...state,
target: state.target.filter(({ id }) => id !== action.id)
};
看看这是否有效。
推荐阅读
- c# - CrossGeolocator GetPositionAsync 退出循环/方法
- bluetooth - 与 BLE Cycle Trainer 互动
- c - 局部变量可能尚未初始化
- python - 计算每个组的滚动总和
- javascript - 如何修复 react-native 中导入的 .js 文件?
- python - 用python3.7修剪列表中的链接
- spring - HttpSession setMaxInactiveInterval 不触发 Spring Security 会话 SessionDestroyedEvent
- ios - RxSwift MVVM 在按钮提交时验证表单然后发出 API 请求
- node.js - 如何取消引用 Mongoengine 使用 Mongoose 创建的对象?
- javascript - 在移动设备上隐藏视频并仅显示海报