Reactjs 组件不会基于react redux中的状态更改进行渲染
当mapStateToProps更新且props在项目组件中不被接受时,项目不会渲染,如果使用CombineReducer,则项目会工作,但如果没有CombineReducer,则项目不会渲染Reactjs 组件不会基于react redux中的状态更改进行渲染,reactjs,redux,Reactjs,Redux,当mapStateToProps更新且props在项目组件中不被接受时,项目不会渲染,如果使用CombineReducer,则项目会工作,但如果没有CombineReducer,则项目不会渲染 reducer.js 这是我的reducer,我在其中维护了状态,但在这里它得到更新,但在项目组件中它的呈现状态是更新的 export const initialState={ rows:[], projectformvalue:{ projectname:"",
reducer.js
这是我的reducer,我在其中维护了状态,但在这里它得到更新,但在项目组件中它的呈现状态是更新的
export const initialState={
rows:[],
projectformvalue:{
projectname:"",
companyname:"",
description:"",
estimationcost:"",
},
tabledisplay:false,
open:true,
}
const reducer=(state=initialState,action)=>{
const newState={...state};
if(action.type==='CHANGE'){
return {...state, projectformvalue:{...state.projectformvalue, [action.payload.name]:action.payload.value}}
}
else if(action.type==='SAVE'){
let temp = state.rows;
console.log(state.projectformvalue);
temp.push(state.projectformvalue);
return {...state, "rows": temp}
//newState.rows.push({ ...newState.projectformvalue});
}
return newState;
}
export default reducer;
project.js
import React,{Component}from 'react';
import Actions from './Actions';
import {connect} from 'react-redux';
class Project extends Component{
render(){
let {rows} = this.props.states;
console.log(rows);
return(
<div className="employeeRegister">
<Actions/>
<table>
<thead>
<tr>
<th>Project Name</th>
<th>Company Name</th>
<th>Description Name</th>
<th>Estimation Cost</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
{rows.map(tablerows=>{
return (
<tr key={Math.random()}>
<td>{tablerows.projectname}</td>
<td>{tablerows.companyname}</td>
<td>{tablerows.description}</td>
<td>{tablerows.estimationcost}</td>
<td>
<button onClick={()=>this.props.handleEdit()}>Edit</button>
</td>
</tr>
)
})}
</tbody>
</table>
</div>
)
}
}
const mapStateToProps=(state)=>{
console.log(state);
return { states:state.rows }
}
export default connect(mapStateToProps)(Project);
export const initialState={
行:[],
projectformvalue:{
项目名称:“”,
公司名称:“,
说明:“,
估计费用:“,
},
tabledisplay:false,
开放:是的,
}
const reducer=(state=initialState,action)=>{
const newState={…state};
if(action.type==='CHANGE'){
返回{…state,projectformvalue:{…state.projectformvalue[action.payload.name]:action.payload.value}
}
else if(action.type=='SAVE'){
设temp=state.rows;
console.log(state.projectformvalue);
温度推送(状态projectformvalue);
返回{…状态,“行”:temp}
//newState.rows.push({…newState.projectformvalue});
}
返回新闻状态;
}
导出默认减速机;
project.js
从“React”导入React,{Component};
从“/Actions”导入操作;
从'react redux'导入{connect};
类项目扩展组件{
render(){
设{rows}=this.props.states;
console.log(行);
返回(
项目名称
公司名称
描述名称
估算成本
行动
{rows.map(tablerows=>{
返回(
{tablerows.projectname}
{tablerows.companyname}
{tablerows.description}
{tablerows.estimationcost}
this.props.handleEdit()}>Edit
)
})}
)
}
}
常量mapStateToProps=(状态)=>{
console.log(状态);
返回{states:state.rows}
}
导出默认连接(MapStateTops)(项目);
在这些行中:
let temp = state.rows;
console.log(state.projectformvalue);
temp.push(state.projectformvalue);
您意外地改变了状态。行
(改变状态将阻止在组件更改时重新渲染组件)。您应该制作一个浅拷贝,如下所示:
let temp = [...state.rows]; // This won't mutate the old state.rows
console.log(state.projectformvalue);
temp.push(state.projectformvalue);
状态更新是否正确?@HarishSoni yes state Is Updated日志是否正在渲染?no log not Rendering确保您的状态
包含名为行
的数组,并使用const而不是let in您的渲染:const{rows}=this.props.states代码>