【问题标题】:React native array state not synchronized [duplicate]反应本机数组状态不同步[重复]
【发布时间】:2021-04-16 15:46:06
【问题描述】:

你好 stackoverflow 我有一个反应原生的问题,我正在开发我的功能,允许我喜欢一个帖子,但是当我将我的 id 推送到我的数组上时,我的控制台是空的。 要查看我的表格,我必须再次单击另一个帖子,以便我的第一个 ID 显示在我的表格中。

这是我的代码

 const [liked, setLiked] = useState([])

    const arr = []

    const Like = (item) => {
        if (liked.indexOf(item) === -1) {
            const newArr = [...liked]
            newArr.push(item)
            setLiked(newArr)
            console.log(liked)
            console.log("ADD ID")
        }
    }
    


    const removelike = (item) => {
        if (liked.indexOf(item) >= 0) {
        console.log(liked.indexOf(item))
        const DeleteID = liked
        DeleteID.splice(item, 1)
        setLiked(DeleteID)
        console.log("Delete ID")
        }
    }

【问题讨论】:

  • Splice 需要一个起始索引和一个删除计数(不是元素)。尝试将您的 removeLike 正文简化为 setLiked(liked.filter(l => l !== item));
  • 我使用 indexof 更正我的代码以检索我的索引,谢谢

标签: react-native


【解决方案1】:

使用的useState实际上是异步的。因此,在 setLike 之后喜欢的控制台日志记录不会显示更新后的值。要检查值,您需要控制 useEffect 中的值

useEffect(()=> {
    console.log('liked',liked);    
}, [liked])

您可以在 useEffect 中执行其他操作,因为它只会在 like 的值发生变化时被调用

【讨论】:

  • 谢谢我的问题已解决
  • 如果您可以投票回答以帮助其他面临相同问题的开发人员,那就太好了。
猜你喜欢
  • 2021-09-05
  • 2018-08-09
  • 2020-08-10
  • 1970-01-01
  • 2020-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-22
相关资源
最近更新 更多