@AVasiliev322

Почему не ререндерится компонент react-redux?

Не могу найти ошибку. Создал простейший компонент, при нажатии на кнопку action выстреливает, store меняется, но в компоненте props остаются не измененные. Почему так происходит?

/**Text.js
class Text extends Component {

  render () {
    return(
      <div>
        <p>{this.props.state.date}</p>
        <button onClick={this.props.onSelect}></button>
      </div>
    )
  }
}

export default connect(
  state => ({state: state.text}),
  dispatch => ({
    onSelect(date) {
        dispatch({type: 'SELECT__DATE', payload: '1'});
      }
    })
)(Text);


/**reducer
const innitialState = {
  date: '1'
}
export default function (state = innitialState, action) {
  var newState = Object.assign(state);
  switch (action.type) {
    case 'SELECT__DATE':
      newState.date += action.payload;
      break;
  }
  return newState;
}

/**reducers
export default combineReducers({
  text
});


/**index.js
const middleware = [thunk];
let store = createStore(reducers, applyMiddleware(...middleware));
ReactDOM.render(
  <Provider store = {store}>
    <Text />
  </Provider>,
  document.getElementById('root'));
  • Вопрос задан
  • 170 просмотров
Решения вопроса 1
@davidnum95
Потому что Object.assign первым аргументом принимает целевой объект, а не то что вы подумали. Нужно так:
export default function (state = innitialState, action) {
  switch (action.type) {
    case 'SELECT__DATE':
      return Object.assign({}, state, {
         date: state.date + action.payload,
       });
      break;
  }
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы