у меня RowsCont
с renderRows
renderRows = () => {
let result = [];
const {rows} = this.props;
console.log('RENDER');
console.log(rows);
for(let key in rows){
result.push(<Row={rows[key].id}
onHover={this.onHover}
row={rows[key]}/>);
}
return result;
};
....
render(){<div>{this.renderRows()}</div>}
....
function mapStateToProps(state) {
console.log('mapState');
console.log(state.rows.rows);
return {
rows: state.rows.rows,
}
}
Компонент строки:
render(){
return (
<div>
<div>{this.props.row.id}</div>
<div>{this.props.row.value}</div>
</div>
)
}
Строки - это набор объектов, каждый из которых выглядит так: {id: 5, value: 'some value'}
У меня есть редуктор, который изменяет значение объекта с определенным идентификатором:
case 'SET_NEW_ROW_VALUE':
let currentRows = state.rows;
const changedIndex = currentRows .findIndex((obj) => obj.id === action.id);
currentRows [changedIndex].value = action.value;
return Object.assign({}, state, {
rows: currentRows
});
Все работает, но если состояние изменяется, компонент не рендерится повторно.
Я уверен, что это состояние изменилось, потому что я вижу новое состояние в mapStateToProps
с console.log
, каждый раз, когда оно изменяется, но я не вижу console.log
из renderRows
.
Каждый компонент строки имеет и onHover
. Если я наведу курсор на строку, она будет перерисована, и я вижу новое состояние для строки с новым значением.