- 30
- 0
问题描述
TODO List案例,删除list的action数据改变后没有重新渲染UI
问题出现的环境背景及自己尝试过哪些方法
redux-devtools-extension插件,检查action触发后的数据变化,发现一切正常.
相关代码
reducer
const defaultState = {
inputValue: 'somethings',
list:[]
}
export default (state=defaultState, action) => {
const newState = Object.assign({}, state)
switch (action.type) {
case 'change_input_value':
newState.inputValue = action.value
return newState
case 'submit_input_value':
if (newState.inputValue !== ''){
newState.list.push(newState.inputValue)
newState.inputValue = ''
}
return newState
case 'delete':
newState.list.splice(action.index, 1)
return newState
default:
break;
}
return newState
}
todoList.js
import React, {Fragment } from 'react'
import {connect} from 'react-redux'
const TodoList = (props) => {
const {list, inputValue, handleClick, handleDelete, handleInputChange} = props
return (
<Fragment>
<input onChange={handleInputChange} value={inputValue}></input>
<button onClick={handleClick}>提交</button>
<ul>
{
list.map((item, index) => {
return <li key={index} onClick={() => {handleDelete(index)}}>{item}</li>
})
}
</ul>
</Fragment>
)
}
const mapStateToProps = (state) => {
return {
inputValue: state.inputValue,
list: state.list
}
}
const mapDispatchToProps = (dispatch) => {
return {
handleInputChange(e) {
const value = e.target.value
const action = {
type: 'change_input_value',
value
}
dispatch(action)
},
handleClick(){
const action = {
type: 'submit_input_value'
}
dispatch(action)
},
handleDelete(index){
const action = {
type: 'delete',
index
}
dispatch(action)
}
}
}
export default connect(mapStateToProps, mapDispatchToProps)(TodoList)
你期待的结果是什么?实际看到的错误信息又是什么?
没有错误,只是点击新增加的list item后,数据state变化了,而页面UI没变化.
- 共 0 条
- 全部回答
-
喵粉物语●′ω● 普通会员 1楼
在React中,一个Todo List组件可以通过Redux库来管理。Redux是一个库,它提供了一种机制,使你能够以一种中心化的、自动化的、可追踪的方式管理你的应用程序。
以下是一个简单的Todo List组件的ReactRedux reducer代码示例:
```javascript import { createStore, applyMiddleware } from 'redux'; import thunk from 'redux-thunk'; import todoReducer from './todoReducer';
const store = createStore(todoReducer, applyMiddleware(thunk));
export default store; ```
在这个例子中,我们首先导入了
redux和redux-thunk库,然后我们创建了一个新的Redux store。然后,我们使用createStore函数创建了一个Redux store,并在其中添加了一个名为todoReducer的 reducer。todoReducer是一个 reducer函数,它会接收一个输入state,然后根据这个输入更新state。在这个例子中,state是一个对象,其中包含了当前的Todo List的状态。以下是一个
todoReducer函数的示例:```javascript const todos = [];
function reducer(state = todos, action) { switch (action.type) { case 'ADD_TODO': return { ...state, todos: [...state.todos, action.payload] }; case 'DELETE_TODO': return { ...state, todos: state.todos.filter(todo => todo.id !== action.payload.id) }; case '完成_TODO': return { ...state, todos: state.todos.filter(todo => todo.id === action.payload.id) }; default: return state; } } ```
在这个例子中,我们定义了一个
todos数组来存储所有的Todo List的状态。然后,我们定义了一个reducer函数,它接收一个state和一个action作为输入。这个函数根据action的类型来决定如何更新state。例如,如果action是一个ADD_TODO,那么我们就将action.payload添加到state的todos数组中。如果action是一个DELETE_TODO,那么我们就从state的todos数组中删除action.payload的Todo。如果action是一个完成_TODO,那么我们就从state的todos数组中删除action.payload的Todo。最后,我们使用
applyMiddleware函数将redux-thunk库添加到我们的store中。redux-thunk库可以用来处理异步操作,例如添加新的Todo List。这就是一个简单的Todo List组件的ReactRedux reducer代码示例。你可以根据自己的需要来修改这个 reducer,例如添加更多的输入和输出,或者改变如何处理异步操作。
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
