javascript - Redux 状态更改后组件不会重新渲染
问题描述
我正在尝试制作待办事项列表。我从 Redux 示例中截取 UI,并开始以自己的方式编写逻辑。我遇到了一个问题。所以,问题是当我点击 Mark All Completed 按钮时,我对 dos 的所有复选标记在 UI 上不可见,但状态已更新,这在 Redux Dev Tool 中完全可见。请帮助我了解这是怎么回事。
在这里,我发送一个动作。(页脚.js)
import React from 'react';
import {useDispatch} from "react-redux";
import {markAllCompleted} from "../actions";
const Footer = () => {
const dispatch = useDispatch();
return (
<footer className="footer">
<div className="actions">
<h5>Actions</h5>
<button className="button"
onClick={() => dispatch(markAllCompleted())}>
Mark All Completed
</button>
<button className="button">
Clear Completed
</button>
</div>
<RemainingTodos/>
<StatusFilter/>
<ColorFilters/>
</footer>
)
}
export default Footer
在这里,我选择所需对象的 Completed 字段并将其粘贴到 defaultValue (TodoListItem.js)
import React, {useState} from 'react';
import {ReactComponent as TimesSolid} from './times-solid.svg';
import {markCompleted, deleteToDo, addColor} from "../actions";
import {useDispatch, useSelector} from "react-redux";
const TodoListItem = ({todo}) => {
const dispatch = useDispatch();
const {text, id} = todo;
const completed = useSelector(state => state.todos.find(item => item.id === id).completed);
const colorNames = useSelector(state => state.filters.filterColors);
const [innerSelectColor, setInnerSelectColor] = useState("");
console.log(completed);
console.log("render TodoListItem");
const colorSetter = (e) => {
dispatch(addColor(id, e.target.value));
setInnerSelectColor(e.target.value);
}
return (
<li>
<div className="view">
<div className="segment label">
<input className="toggle"
type="checkbox"
defaultChecked={completed}
onClick={() => dispatch(markCompleted(id, completed))}
/>
<div className="todo-text">{text}</div>
</div>
<div className="segment buttons">
<select className="colorPicker"
onChange={colorSetter}
style={{color: innerSelectColor}}
>
{colorNames.map((color, index) =>
<option key={index} value={color}>{color.toUpperCase()}</option>)}
</select>
<button className="destroy" onClick={() => dispatch(deleteToDo(id))}>
<TimesSolid/>
</button>
</div>
</div>
</li>
)
}
export default React.memo(TodoListItem);
提前致谢。
解决方案
推荐阅读
- reactjs - 如何在反应中以安全的方式传递 url 参数
- javascript - PDF预加载的CORB问题
- ruby-on-rails - 关系不起作用虽然测试工作但返回零
- webpack - webpack构建时如何像Nuxt一样做进度条
- javascript - 如何添加新的 js 代码并在 BODY 上运行?
- reactjs - React Speech Recognition - 通过更新状态将文本插入内存
- rpm - 从 rpm 构建 YUM
- python - 如何在选择选项字段中保存/显示 manytomany 字段
- swift - 实体的命名约定及其协议(接口)
- javascript - 如何正确捕获 JavaScript Click 事件以隐藏和显示 Div?