Как в функциональном компоненте обновить объект в store черех данные в инпуте?

Есть компонент с инпутом:
import React, {useEffect} from 'react';
import { connect } from 'react-redux';
import Input from '../../elements/Input';
import { updateName } from '../../actions/updateName';

const Archve = (props) => {
  const { newProjectData } = props;
  const handleChange = (e) => {
    e.preventDefault();
    console.log('handle');
    const { newProjectData } = props;
    console.log('newProjectData', newProjectData);
    const newName = e.target.value;
    console.log('name', newName);
    updateName(newName);
    
  };
  const updateNameProject = (e) => {
    if (e.key === 'Enter') {
      console.log('отправка на сервер');
    }
  };
  return (
    <div className="content">
      <div className="container-fluid">
        <div className="row">Архив</div>
        <Input
          label="Название проекта"
          placeholder="Название проекта"
          value={newProjectData.name}
          name="nameProject"
          onChange={handleChange}
          onKeyPress={updateNameProject}
          // onBlur={this.handleChangeFocus}
          hasError={false}
        />
      </div>
    </div>
  );
};

const mapDispatchToProps = (dispatch) => ({
  updateName: (name) => updateName(name),
});

const mapStateToProps = (state) => ({
  newProjectData: state.NewProject.newProjectData,
});
export default connect(mapStateToProps, mapDispatchToProps)(Archve);
;


есть экшен:
export const updateName = (name) => (dispatch) => {
    dispatch({
      type: 'UPDATE_NEW_PROJECT_NAME',
      payload: name,
    });
  };

и reducer:
export const initialState = {
  newProjectData: {},
};

export const NewProject = (state = initialState, action) => {
  switch (action.type) {
    case 'ADD_NEW_PROJECT':
      return { ...state, newProjectData: action.payload };
    case 'SET_NEW_PROJECT_DATA':
      return { ...state, newProjectData:action.payload};
    case 'UPDATE_NEW_PROJECT_NAME':
      return { ...state, newProjectData: { ...state.newProjectData, name: action.payload } };
    default:
      return state;
  }
}


Не работает так. В консоле выводится что OnChange работает, но новое имя для value inputa не приходит. Подскажите пожалуйста как подправить. Спасибо всем
  • Вопрос задан
  • 61 просмотр
Решения вопроса 1
hzzzzl
@hzzzzl
да вроде должно работать

// reducer
export const NewProject = (state = initialState, action) => {
  console.log(action.type, action.payload)   // досюда доходит новый name?
  switch (action.type) {


UPD

import { updateName } from '../../actions/updateName';

  const handleChange = (e) => {
    .....
    // тут ты вызываешь оригинальную функцию actions/updateName
    // а не ту которую привязал в mapDispatchToProps 
    // updateName(newName);

    // попробуй
    props.updateName(newName);
    
  };
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
01 мая 2024, в 02:11
5000 руб./за проект
01 мая 2024, в 00:29
2000 руб./за проект
01 мая 2024, в 00:20
15000 руб./за проект