Dar*_*on4 1 reactjs react-redux
我正在学习React和Redux,并遵循Redux网站上的教程。我正在尝试添加一项功能,以使用户可以按名称,日期等对待办事项进行排序。问题是当我对待办事项进行排序时,待办事项列表不会重新呈现。该state.sortBy由不同的组件发出的,它的工作。我可以清楚地看到,该数组是通过登录store.getState()控制台进行排序的。当然,该组件已订阅商店。
数组更改。当我按“日期”排序时,它按日期排序。当我按“名称”排序时,它按名称排序。但是待办事项列表组件会忽略它,并且不会重新呈现。
这是待办事项列表容器组件的代码:
import { connect } from 'react-redux'
import TodoList from '../components/TodoList'
import { toggleTodo } from '../actions'
const sortTodos = (todos, sortBy) => {
switch (sortBy) {
case "date":
return todos.sort((a, b) => Date.parse(b.date) - Date.parse(a.date))
case "name":
return todos.sort((a, b) => {
if (a.name < b.name)
return -1
if (a.name > b.name)
return 1
return 0
})
default:
return todos
}
}
const mapStateToProps = (state) => ({
todos: sortTodos(state.todos, state.sortBy)
})
const mapDispatchToProps = (dispatch) => ({
onTodoClick: (id) => dispatch(toggleTodo(id))
})
export default connect(
mapStateToProps,
mapDispatchToProps
)(TodoList)
Run Code Online (Sandbox Code Playgroud)
这是演示组件:
import React from 'react'
import Todo from './Todo'
const TodoList = ({ todos, onTodoClick }) =>
<ul>
{todos.map((todo) =>
<Todo
key={todo.id}
{...todo}
onClick={() => onTodoClick(todo.id)}
/>
)}
</ul>
export default TodoList
Run Code Online (Sandbox Code Playgroud)
我已经尝试了几件事情,但是我已经成功了,但是我认为这不是正确的方法。当我附加.slice(0, -1)到sortTodos函数的return语句时,组件将重新呈现。
const sortTodos = (todos, sortBy) => {
switch (sortBy) {
case "date":
return todos.sort((a, b) => Date.parse(b.date) - Date.parse(a.date)).slice(0, -1)
.
.
.
Run Code Online (Sandbox Code Playgroud)
感谢帮助
sort执行数组排序(修改数组本身)。您需要先进行复印,然后再进行排序。例如
todos.slice(0).sort((a, b) => Date.parse(b.date) - Date.parse(a.date))
Run Code Online (Sandbox Code Playgroud)
要么
[...todos].sort((a, b) => Date.parse(b.date) - Date.parse(a.date))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1483 次 |
| 最近记录: |