我刚开始学习js和react。我已经创建了一个独立工作的RNG函数。但是,我想把它的值传递给我的useState中的ticketNumber变量。我已经尝试了通过"tickennumber = rng"传递值的各种方法,甚至尝试通过"setComplaints(…complaint, ticketNumber = Math.floor(Math.random() * (maxValue - minValue + 1) + minValue))";
const [complaint, setComplaints] = useState({
email: "",
message: "",
ticketNumber: 0,
});
function makeTicketNumber() {
setComplaints(...complaint, (ticketNumber) => ticketNumber +1);
}
function randomNumberGenerator() {
setRng(Math.floor(Math.random() * (maxValue - minValue + 1) + minValue));
// complaint.ticketNumber = rng;
}
useState()通常用于字符串、数字或布尔值等基本值。如果您需要保存对象时,你需要确保你每次保存新对象,否则不会看到这些变化反应(它使用= = = b比较)。
所以你可以在几个useState()调用中拆分变量
const [email, setEmail] = useState(initialEmail)
const [ticketNumbers, setTicketNumber] = useState(initialNumbers)
或使用这样的模式来更新值:
setComplaint({...complaint, ticketNumber: 10})
更新。
setComplaint()
可以将函数作为参数,该参数提供了prevState的值。如果你出于某种原因想要使用它,你可以这样写:
setComplaint(prevComplaint => {
return {
...prevComplaint,
ticketNumber: prevComplaint.ticketNumber + 1,
}
})
但这是一个庞大的解决方案。
无论您在setCompaints()
中设置什么都将变成您的新状态,
现在,这是抱怨对象+一个函数,这可能不是你想要的。
试试这个:
function makeTicketNumber() {
return setComplaints({...complaint, ticketNumber: ticketNumber + 1});
}