React:第二次点击时更新上下文

Posted

技术标签:

【中文标题】React:第二次点击时更新上下文【英文标题】:React : Context update at the second click 【发布时间】:2020-05-13 15:08:15 【问题描述】:

当我尝试更新上下文时,我的 react 脚本遇到了一个小问题。

我有一个按钮,当点击它时应该更新上下文,但它只在第二次点击时起作用:

这是我的组件的代码:

    import React,  useContext  from 'react'
    import axios from 'axios'
    import  MdDelete  from 'react-icons/md'
    import AppContext from '../../../../../../../context/AppContext'


    const DeleteAttribute = (props) => 
      const context = useContext(AppContext)

      const handleClick = () => 
          context.app.insertApiResponse('test')

          console.log(context.app.lastApiResponse)
      

      return (
          <div className="item skr-flex row centered-v" onClick= handleClick >
              <MdDelete className="skr-icon delete mr-s"/>
              <span className="font-700">Supprimer</span>
          </div>
      )
    
    export default DeleteAttribute

我也尝试使用Appcontext.Consumer,但出现了相同的结果。

我不明白为什么它只能在第二次单击按钮时起作用,如果有人能给我答案,这对我很有帮助。

提前致谢!

【问题讨论】:

【参考方案1】:

问题是您试图在 api 响应任何数据之前访问一个值。在第二次运行中,context.app.lastApiResponse 中的数据具有第一次运行的值。所以你需要做的是使用then(),这会等待数据然后执行里面的代码

不确定其他代码的具体外观,但您可以尝试以下方法:

const DeleteAttribute = (props) => 
  const context = useContext(AppContext)

  const handleClick = () => 
      context.app.insertApiResponse('test').then(() => 
    console.log(context.app.lastApiResponse)
  )   

【讨论】:

以上是关于React:第二次点击时更新上下文的主要内容,如果未能解决你的问题,请参考以下文章

useState 在第二次点击时更新状态

文本框事件仅触发第二次

React Native - 在消费者中更新上下文仅在第一次工作

React - 每当更新反应上下文中的状态时如何调用函数?

在 React 上下文中更新嵌套状态的最佳方法

为啥当上下文值更新时我的上下文没有更新?