React / Redux / Отправить текст, набранный на textarea, в магазин - PullRequest
1 голос
/ 31 января 2020

мое действие:

export const ON_MESSAGE = 'ON_MESSAGE';

export const sendMessage = (text, sender = 'user') => ({
  type: ON_MESSAGE,
  payload: { text, sender },
});

мой редуктор:

const initalState = [{ text: [] }];

const messageReducer = (state = initalState, action) => {
  switch (action.type) {
    case ON_MESSAGE:
      return [...state, action.payload];
    default:
      return state;
  }
};

export default messageReducer;

мой код:

const Chat = props => {
  const dispatch = useDispatch();
  const messages = useSelector(state => state.Chat);

  return (
    <Styled.ChatBox>
      <Styled.ChatHeader>
        <p>Chat Bot</p>
        <div>
          <FontAwesomeIcon icon={faAngleDown} size="1x" color="white" />
          <FontAwesomeIcon icon={faTimes} size="1x" color="white" />
        </div>
      </Styled.ChatHeader>
      <Styled.ChatLog></Styled.ChatLog>
      <Styled.ChatInput>
        <textarea placeholder="Digite aqui sua mensagem" />
        <button onClick={dispatch(sendMessage)}>
          <FontAwesomeIcon icon={faPaperPlane} size="lg" color="black" />
        </button>
      </Styled.ChatInput>
    </Styled.ChatBox>
  );
};

export { Chat };

Здравствуйте, в основном, я хотел бы знать, как я отправлю значение, напечатанное в моем тексте в моем хранилище редуксов

, а также способ отображения этого типизированного значения в моем компоненте

> <Styled.ChatLog> </ Styled.ChatLog>

в основном каждое сообщение должно генерировать div (компонент)

> <Styled.ChatMessage />

1 Ответ

0 голосов
/ 31 января 2020

вы можете сохранить ваше сообщение в локальном штате и отправить его в полезную нагрузку.

const Chat = props => {
  const dispatch = useDispatch();
  const messages = useSelector(state => state.Chat);
  const [text, setText] = React.useState("");

  return (
    <Styled.ChatBox>
      <Styled.ChatHeader>
        <p>Chat Bot</p>
        <div>
          <FontAwesomeIcon icon={faAngleDown} size="1x" color="white" />
          <FontAwesomeIcon icon={faTimes} size="1x" color="white" />
        </div>
      </Styled.ChatHeader>
      <Styled.ChatLog>
        {messages.map( message => (
          <Styled.ChatMessage>
            {message.text}
          </Styled.ChatMessage>
        )}
      </Styled.ChatLog>
      <Styled.ChatInput>
        <textarea value={text} onChange={e => setText(e.target.value)} placeholder="Digite aqui sua mensagem" />
        <button onClick={() => dispatch(sendMessage({ text }))}>
          <FontAwesomeIcon icon={faPaperPlane} size="lg" color="black" />
        </button>
      </Styled.ChatInput>
    </Styled.ChatBox>
  );
};

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