javascript - setState 没有按时更新值
问题描述
当我在表单中按提交时,我只能在第二次按下时得到结果。当我调试时,它看起来像 setState 仅在第二次 userId 更新状态),但我希望它等到状态更新(因此 userId 将更改为新值)然后才将其发送到 axios 请求。
import axios from 'axios';
class MessageServices {
constructor(){
this.url = 'http://localhost:3001/messaging/';
}
//get messages from server
getUserMessages = async (userId) => {
return await axios.get(`${this.url}get-all-messages/${userId}`);
}
//add new message to server
setUserMessage = async (msg) => {
await axios.post(`${this.url}write-message`, msg);
}
}
//show only instance and not all the class
export default new MessageServices();
import React,{useState} from 'react';
import axios from 'axios';
import {Message} from './Message';
import MessageServices from '../services/MessageServices'
export const AllMessages = () => {
const [messagesState, setMessages] = useState([]);
const [userId, setUser] = useState("");
const getAllMessages = async (event) =>{
if(event){
event.preventDefault();
await setUser(event.target.elements.userInput.value);
}
const userMessages = await MessageServices.getUserMessages(userId);
if(userMessages.data){
...
}else{
...
}
}
const handleDelete = async (id,receiver) => {
let obj = {
'id': id,
'receiver': receiver,
};
await axios.delete("http://localhost:3001/messaging/delete-message",{ data: obj });
getAllMessages();
};
return(
<form onSubmit={getAllMessages}>
<div className="message-style">
<div className="tm-bg-circle-white tm-flex-center-v">
<header className="text-center">
<h1 className="tm-site-title">Insert name</h1>
<input type="text" id="userInput" name="userInput"/>
<p className="tm-site-subtitle">Insert the name and get all messages</p>
</header>
<p className="text-center mt-4 mb-0">
<button type="submit" className="btn tm-btn-secondary">Show Messages</button>
</p>
</div>
...
</div>
</div>
</form>
)
}
解决方案
我想,有了useState
你,你将无法解决这个问题。由于useState
尝试重新渲染组件,我认为它不会起作用。我建议你useRef
改用。
推荐阅读
- javascript - 从http获取请求Angular7获取结果
- wso2 - WSO2 ESB 如何测量调用或发送中介的响应时间
- c - 在“main”之外执行 void 后如何回到“main”的顶部
- serial-port - Arduino IDE Ubuntu 端口灰显(未安装串行端口)
- c# - 从 nopCommerce 中的产品 id 访问基本 nop 模型自定义属性
- java - 字符串中的正斜杠不允许 HTML 为 JLabels 正常工作
- react-native - 如何在whatsapp上发送消息而不使用react-native打开应用程序?
- typescript - 推断的参数类型意外
- reverse-proxy - 如何使用 nginx 反向代理服务器限制对 RESTful API 的访问?
- javascript - 如何在 React Native 中渲染从数据库中检索的字符串中的换行符?