【问题标题】:how to avoid first default effect in UseEffect [duplicate]如何避免UseEffect中的第一个默认效果[重复]
【发布时间】:2021-10-30 19:45:29
【问题描述】:

我已经实现了在单击按钮时会出现you have clicked 的警报的功能,但此警报会在第一次渲染时出现。我不想要那样的。我想在计数为 1 并转发时开始提醒。各位大神能帮帮我吗?

import React, { useEffect, useState } from 'react';

function Demo() {
  const [num, setNum] = useState(0)

  const change = () => {
    setNum(num + 1)
  }

  useEffect(() => {
    alert(`item clicked ${num} times`)
  }, [num])

  return(
    <div>
      <h1>{num}</h1>
      <button onClick={change}>Count</button>
    </div>
  )
}

export default Demo;

【问题讨论】:

标签: reactjs render use-effect


【解决方案1】:

您可以使用if-statement 简单地检查数字。

如果 num 大于zero,则显示警报,否则不显示。

import React, { useEffect, useState } from 'react';

function Demo() {
  const [num, setNum] = useState(0)

  const change = () => {
    setNum(num + 1)
  }

  useEffect(() => {
    if (num > 0) alert(`item clicked ${num} times`)
  }, [num])

  return(
    <div>
      <h1>{num}</h1>
      <button onClick={change}>Count</button>
    </div>
  )
}

export default Demo;

【讨论】:

  • 感谢您的帮助。除了if-condition,您还有其他解决方案吗?如果是,请分享。
  • 如果我可以问,if-condition 有什么问题?您可以使用ref 并检查它以绕过第一次渲染,但这在您的用例中是不必要的。一个简单的if-condition 就可以了。
猜你喜欢
  • 1970-01-01
  • 2021-12-22
  • 1970-01-01
  • 2016-09-06
  • 1970-01-01
  • 2015-06-16
  • 1970-01-01
  • 1970-01-01
  • 2019-11-21
相关资源
最近更新 更多