Я не вижу введенного текста в React.js. В чем может заключаться моя ошибка?

Здравствуйте. При изучении React я столкнулась с проблемой: после добавления контейнерного компонента в проект перестал работать функционал, который принимает сообщение, введенное в textarea, и выводит его по нажатию кнопки. Хотя стейт обновляется, согласно данным консоли, я не могу найти ошибку. Могли бы вы помочь разобраться, что именно может быть не так в моем коде? <br/> <br/> Начну с кода редьюсера - dialogsPage-reducer.js: <br/> <pre><code class="javascript">const SEND_MESSAGE = "SEND_MESSAGE";
const UPDATE_NEW_MESSAGE = "UPDATE_NEW_MESSAGE";

let initialState = {
  dialogsData: [
    {
      id: 1,
      name: "1",
      avatar:
        "https://i.pinimg.com/736x/32/b3/45/32b3451cdffcb95c5ec9213018865cfb.jpg",
    },
    {
      id: 2,
      name: "2",
      avatar:
        "https://i.pinimg.com/736x/88/10/bd/8810bd40925c19004c27598a3666c881.jpg",
    },
    {
      id: 3,
      name: "3",
      avatar:
        "https://i.pinimg.com/736x/a7/0b/19/a70b19cac859c17d0402d06ea4920fbb.jpg",
    },
    {
      id: 4,
      name: "4",
      avatar:
        "https://i.pinimg.com/736x/b0/ee/5d/b0ee5dfc218cc0478047a3c07ad4dc6c.jpg",
    },
    {
      id: 5,
      name: "5",
      avatar:
        "https://i.pinimg.com/736x/c4/06/b5/c406b5856027f68ac5dd7fc378dd367e.jpg",
    },
    {
      id: 6,
      name: "6",
      avatar:
        "https://i.pinimg.com/236x/67/4d/e6/674de60418e08b784d91036d1de3c809.jpg",
    },
  ],
  messagesData: [
    { id: 0, message: "first message" },
    { id: 1, message: "second message" },
    { id: 2, message: "thurd message" },
  ],
  newMessageText: "",
};

export const dialogsReducer = (state = initialState, act
  • 17 октября 2024 г. 18:02
Ответы на вопрос 1
На первый взгляд, в вашем описании не хватает некоторых важных частей кода, таких как компоненты, которые используют редьюсер, а также обработчики ввода и отправки сообщения. Однако, мы можем разобрать потенциальные проблемы, которые могут возникнуть в вашем случае.

1. **Структура Action**: Убедитесь, что вы правильно реализовали действия (actions). Ваш редьюсер использует два типа действий: `SEND_MESSAGE` и `UPDATE_NEW_MESSAGE`. Убедитесь, что вы правильно создаете действия и вызываете их в вашем компоненте.

2. **Обновление состояния**: Проверьте, правильно ли вы обновляете состояние в редьюсере. Вот пример вашего редьюсера с добавленным обработчиком для `SEND_MESSAGE` и `UPDATE_NEW_MESSAGE`:

   ```javascript
   export const dialogsReducer = (state = initialState, action) => {
     switch (action.type) {
       case SEND_MESSAGE:
         const newMessage = {
           id: state.messagesData.length,
           message: state.newMessageText,
         };
         return {
           ...state,
           messagesData: [...state.messagesData, newMessage],
           newMessageText: "", // очищаем текст после отправки
         };
       case UPDATE_NEW_MESSAGE:
         return {
           ...state,
           newMessageText: action.newText,
         };
       default:
         return state;
     }
   };
   ```

3. **Связывание состояния и диспетчеров (dispatchers)**: В вашем компоненте, который отвечает за отображение и отправку сообщений, вы должны правильно подключить статус нового сообщения и функции для его обновления и отправки.

   Например:

   ```jsx
   import React from 'react';
   import { connect } from 'react-redux';
   import { sendMessage, updateNewMessage } from './pathToYourActionsFile';

   const Dialogs = (props) => {
     const handleSendMessage = () => {
       props.sendMessage();
     };

     const handleMessageChange = (e) => {
       props.updateNewMessage(e.target.value);
     };

     return (
       <div>
         <textarea 
           value={props.newMessageText} 
           onChange={handleMessageChange} 
         />
         <button onClick={handleSendMessage}>Send</button>
         <div>
           {props.messagesData.map(message => (
             <div key={message.id}>{message.message}</div>
           ))}
         </div>
       </div>
     );
   };

   const mapStateToProps = (state) => ({
     messagesData: state.dialogsPage.messagesData,
     newMessageText: state.dialogsPage.newMessageText,
   });

   export default connect(mapStateToProps, { sendMessage, updateNewMessage })(Dialogs);
   ```

4. **Импорт действий**: Убедитесь, что вы правильно импортируете действия `SEND_MESSAGE` и `UPDATE_NEW_MESSAGE` в ваш компонент.

5. **Контекст или Redux**: Убедитесь, что ваш компонент обернут в провайдер Redux, чтобы он имел доступ к хранилищу состояния.

Если вы проверьте эти шаги и все равно столкнетесь с проблемой, пожалуйста, предоставьте больше кода от других компонентов, чтобы более точно определить, где может быть ошибка.
Похожие вопросы