Компонент не рендерится в зависимости от изменения состояния в response-redux - PullRequest
0 голосов
/ 24 декабря 2018

Проект не рендерится, когда mapStateToProps обновляется, а реквизиты не принимаются в компоненте проекта, и если он использует combreducers, он работает, но без combreducers проект не рендерит

 reducer.js

Это мой редуктор, в котором я поддерживалсостояние, но оно обновляется здесь, но в компоненте проекта обновляется состояние рендеринга

   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);

1 Ответ

0 голосов
/ 25 декабря 2018

В этих строках:

let temp = state.rows;
 console.log(state.projectformvalue);
 temp.push(state.projectformvalue);

Вы случайно изменили state.rows (изменение состояния предотвратит react повторного рендеринга компонента при его изменении).Вместо этого вы должны сделать мелкую копию, например, так:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...