javascript - 在 redux 中更新状态
问题描述
我正在尝试在 redux 中更新我的状态。但我对如何做到这一点一无所知:
这是组件:
import React from 'react';
import {connect} from 'react-redux';
import fetchTasks from '../actions/getTasks';
class Homepage extends React.Component{
componentDidMount(){
this.props.fetchtsk();
}
render(){
return(
<div>
<h1>Welcome to My Task-Manager Page</h1>
<input type='text' placeholder='insert task'></input>
<button value='insert task'>Insert task</button>
<h3>Here are the tasks:</h3>
<h4>Unchecked:</h4>
{this.props.root.map((item,index)=>{
if(item.isChecked===0)
return (<div><span key={index}>{item.data}</span><input type='checkbox' onClick={()=>this.props.changeCheck(item.InsertionId)}></input></div>)
return '';
})}
<h4>Checked:</h4>
{this.props.root.map((item,index)=>{
if(item.isChecked===1)
return (<div><span key={index}>{item.data}</span><input type='checkbox' checked="checked" onClick={()=>this.props.changeCheck(item.InsertionId)}></input></div>)
return '';
})}
</div>
)
}
}
const matchStatetoProps = (state) =>{
return {root:state.root};
}
const dispatchStatetoProps = (dispatch) =>{
return{
fetchtsk:()=> dispatch(fetchTasks),
changeCheck: (InsertionId)=> dispatch({type:'CHANGECHK',payload:InsertionId})
}
}
export default connect(matchStatetoProps,dispatchStatetoProps)(Homepage);
现在这将显示如下输出:
现在当我选中复选框时,它应该更新相应行的状态并将其放入选中的列中,基本上更新 isChecked 状态。减速机在这里:
var initState=[];
const rootReducer = (state=initState,{type,payload})=>{
switch(type){
case 'DISPLAY':
var ar=[];
payload.map((item)=>{
ar.push({insertionId:item.InsertionId,data:item.Data,isChecked:0});
return ar;
});
return ar;
case 'CHANGECHK':
??????????????????????????????????
default:return state;
}
}
export default rootReducer;
有人可以帮帮我吗?
解决方案
case 'CHANGECHK':
return state.map( i => i.InsertionId === payload ? { ...i, isChecked: 1 } : i );
推荐阅读
- sql - 数据库 | Postgres | 如何检查 IP 是否在 IP 列表或范围中
- python - 从同名的html获取json
- c# - 你能通过一个 IEnumerable
并检索类型? - delphi - TINiFile.WriteBinaryStream 创建异常
- ios - 如何删除 UITableViewController 中显示为弹出框的行
- antlr4 - ANTLR4 ATN 中的 Atom Transition、Set Transition 和 Epsilon Transition 有什么区别?
- android - Firebase 数据库在 android 模拟器上不起作用
- r - 我可以通过使用 R 中的字符来选择数据框或其他对象吗?
- java - 我创建了时钟,我想让背景透明
- markdown - Reveal.js 代码块中的 lineNumbers 使用 pandoc - 降价转换