Функциональная реализация обновления переменной useState, не меняющая значение соответствующим образом ⇐ Javascript
Функциональная реализация обновления переменной useState, не меняющая значение соответствующим образом
У меня есть функция, которая обновляет значения состояния ChatId, currUser и msg. Эта функция вызывается дважды, поэтому я ожидаю, что значения будут обновлены дважды. Однако значения обновляются только один раз. Что я делаю не так?
Это функция:
const displayMessage = (сообщение) => { const newMsg = {id:chatId, текст: сообщение, отправитель: currUser}; setChatId((prevId) => prevId + 1); setCurrUser((prevUser) => { вернуть prevUser === "пользователь"? «бот»: «пользователь»; }); console.log(`currUser: ${currUser}`); setMsg((prevMsg) => [...prevMsg, newMsg]); }; Эта функция вызывается в fetchApi() и handleSend().
Это весь код:
импорт { Коробка, Текстовое поле, Кнопка, Типография, Аватар, Сетка, Бумага, } из "@mui/material"; импортировать SendIcon из «@mui/icons-material/Send»; импортировать {useState, useEffect} из «реагировать»; импортировать аксиомы из «аксиом»; константные сообщения = [ { id: 1, текст: «Привет!», отправитель: «бот» }, { id: 2, текст: «Привет!», отправитель: «пользователь» }, { id: 3, текст: «Чем я могу вам помочь сегодня?», отправитель: «бот» }, ]; функция Приложение() { const [input, setInput] = useState(""); const [msg, setMsg] = useState (сообщения); const [chatId, setChatId] = useState(4); const [currUser, setCurrUser] = useState("пользователь"); const fetchApi = async () => { пытаться { const ответ = ожидайте axios.get( `https://www.omdbapi.com/?apikey=213f50cd&t=${input}` ); displayMessage(response.data.Plot); } поймать (ошибка) { console.error(ошибка); } }; const handleSend = () => { if (input.trim() !== "") { console.log(`пользовательский ввод: ${input}`); // setCurrUser(currUser === "пользователь"? "бот": "пользователь"); // setCurrUser((prevUser) => (prevUser === "user" ? "bot" : "user"); displayMessage (вход); выборкапи(); } }; const displayMessage = (сообщение) => { const newMsg = {id:chatId, текст: сообщение, отправитель: currUser}; setChatId((prevId) => prevId + 1); setCurrUser((prevUser) => { вернуть prevUser === "пользователь"? «бот»: «пользователь»; }); console.log(`currUser: ${currUser}`); setMsg((prevMsg) => [...prevMsg, newMsg]); }; const handleInputChange = (событие) => { setInput(event.target.value); }; возвращаться ( {msg.map((сообщение, индекс) => ( ))} Отправлять ); } const Сообщение = ({ сообщение }) => { const isBot = message.sender === "бот"; возвращаться ( {isBot ? «Б» : «У»} {message.text} ); }; экспортировать приложение по умолчанию; Я попробовал обновить переменные состояния функциональным способом, но это все равно не сработало.
У меня есть функция, которая обновляет значения состояния ChatId, currUser и msg. Эта функция вызывается дважды, поэтому я ожидаю, что значения будут обновлены дважды. Однако значения обновляются только один раз. Что я делаю не так?
Это функция:
const displayMessage = (сообщение) => { const newMsg = {id:chatId, текст: сообщение, отправитель: currUser}; setChatId((prevId) => prevId + 1); setCurrUser((prevUser) => { вернуть prevUser === "пользователь"? «бот»: «пользователь»; }); console.log(`currUser: ${currUser}`); setMsg((prevMsg) => [...prevMsg, newMsg]); }; Эта функция вызывается в fetchApi() и handleSend().
Это весь код:
импорт { Коробка, Текстовое поле, Кнопка, Типография, Аватар, Сетка, Бумага, } из "@mui/material"; импортировать SendIcon из «@mui/icons-material/Send»; импортировать {useState, useEffect} из «реагировать»; импортировать аксиомы из «аксиом»; константные сообщения = [ { id: 1, текст: «Привет!», отправитель: «бот» }, { id: 2, текст: «Привет!», отправитель: «пользователь» }, { id: 3, текст: «Чем я могу вам помочь сегодня?», отправитель: «бот» }, ]; функция Приложение() { const [input, setInput] = useState(""); const [msg, setMsg] = useState (сообщения); const [chatId, setChatId] = useState(4); const [currUser, setCurrUser] = useState("пользователь"); const fetchApi = async () => { пытаться { const ответ = ожидайте axios.get( `https://www.omdbapi.com/?apikey=213f50cd&t=${input}` ); displayMessage(response.data.Plot); } поймать (ошибка) { console.error(ошибка); } }; const handleSend = () => { if (input.trim() !== "") { console.log(`пользовательский ввод: ${input}`); // setCurrUser(currUser === "пользователь"? "бот": "пользователь"); // setCurrUser((prevUser) => (prevUser === "user" ? "bot" : "user"); displayMessage (вход); выборкапи(); } }; const displayMessage = (сообщение) => { const newMsg = {id:chatId, текст: сообщение, отправитель: currUser}; setChatId((prevId) => prevId + 1); setCurrUser((prevUser) => { вернуть prevUser === "пользователь"? «бот»: «пользователь»; }); console.log(`currUser: ${currUser}`); setMsg((prevMsg) => [...prevMsg, newMsg]); }; const handleInputChange = (событие) => { setInput(event.target.value); }; возвращаться ( {msg.map((сообщение, индекс) => ( ))} Отправлять ); } const Сообщение = ({ сообщение }) => { const isBot = message.sender === "бот"; возвращаться ( {isBot ? «Б» : «У»} {message.text} ); }; экспортировать приложение по умолчанию; Я попробовал обновить переменные состояния функциональным способом, но это все равно не сработало.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Предыдущее значение useState используется при запуске следующего действия.
Anonymous » » в форуме Javascript - 0 Ответы
- 6 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Какова цель наличия частной переменной с соответствующим методом сеттера?
Anonymous » » в форуме JAVA - 0 Ответы
- 7 Просмотры
-
Последнее сообщение Anonymous
-