useState 在添加到先前状态时返回一个对象

Posted

技术标签:

【中文标题】useState 在添加到先前状态时返回一个对象【英文标题】:useState returning an object when adding to previous state 【发布时间】:2021-09-03 08:01:57 【问题描述】:

我有一个按钮和 onClick 我希望它在前一个偏移量上加 20。但是,当我执行以下操作时,由于某种原因,我得到了一个对象:

const [ offset, setOffset ] = React.useState(20);

const  data, fetchMore  = useQuery(GET_FEED, 
 variables: 
   offset: offset,
   limit: 10
 ,
 fetchPolicy: 'cache-and-network'
);

<button onClick=(prevOffset) => setOffset(prevOffset + 20)>Next</button>

点击下一步后,请求会抛出 400 并且浏览器会说这些是变量:

variables   …
limit   10
offset  "[object Object]20"

如果我这样做:

<button onClick=() => setOffset(20)>Next</button>

它可以成功运行,但我的偏移量为 20。

【问题讨论】:

尝试将函数传递给setOffsetsetOffset(prevOffset =&gt; prevOffset + 20) 那是因为onClick的第一个参数是event。 @evolutionxbox d'哦,非常感谢 【参考方案1】:

您正在传递 onClick event 参数。实际上,它是一个对象......

setState 允许您传递参数为旧状态的函数。我想这就是你的本意。

试试下面。

const [ offset, setOffset ] = React.useState(20);

const  data, fetchMore  = useQuery(GET_FEED, 
 variables: 
   offset: offset,
   limit: 10
 ,
 fetchPolicy: 'cache-and-network'
);

<button onClick=() => setOffset(prevOffset => prevOffset + 20)>Next</button>

【讨论】:

以上是关于useState 在添加到先前状态时返回一个对象的主要内容,如果未能解决你的问题,请参考以下文章

将项目添加到数组(状态)并且它正在更新状态中的先前记录

它们是使用包含更新的道具和先前状态的 useState 钩子来更新状态的功能形式吗?

如何在页面加载时设置 useState 挂钩的状态?

如何在对象数组中使用 usestate 更新状态?

如何在对象数组中使用 usestate 更新状态?

React Hooks:使用useState更新状态不会立即更新状态[重复]