首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果语句进入useEffect钩子- ReactJs

如果语句进入useEffect钩子- ReactJs
EN

Stack Overflow用户
提问于 2020-07-03 08:47:47
回答 1查看 3.7K关注 0票数 1

我正在检查我的代码,我发现自从我开始使用react钩子,我有一些“问题”,我不能说,但它不够干净。所以基本上我想清理一下我对这个问题的看法。我想在useEffectsetSomething()中使用一个setSomething()语句。因此,基本上有一个消息,我想显示关于状态条件。

电流:

代码语言:javascript
复制
const [displayFeedbackMessage, setDisplayFeedbackMessage ] = useState(undefined);

..。

代码语言:javascript
复制
useEffect(() => {

        setDisplayFeedbackMessage(
            <div>
            {
                displaySelectionResult &&
                selected > 0 &&
                <div className={classes.dnaTableFeedbackMessageDiv}>
                   <b>{Pluralize("document", selected, true)}</b>
                    {" "}selected out of{" "}
                    <b>{Pluralize("document", available, true)}</b>
                    {" "}available.
                </div>
            }

            {
                displayActionResult &&
                <div className={classes.dnaTableFeedbackMessageDiv}>
                    <b>{Pluralize("document", actioned, true)}</b>
                    {" "} downloaded out of{" "}
                    <b>{Pluralize("document", requested, true)}</b>
                    {" "}requested.
                </div>
            }
            </div>
        )

},[selected, displaySelectionResult, displayActionResult])

..。

代码语言:javascript
复制
return (

               <Paper>{displayFeedbackMessage}</Paper>
)

它运转良好,没有任何问题。但当我试图把它转换成这样:

期望:

代码语言:javascript
复制
useEffect(() => {

        setDisplayFeedbackMessage(
            if(displaySelectionResult && selected > 0) {
              <b>{Pluralize("document", selected, true)}</b>
              {" "}selected out of{" "}
              <b>{Pluralize("document", available, true)}</b>
              {" "}available.

        } else if (displayActionResult) {
              <b>{Pluralize("document", actioned, true)}</b>
              {" "} downloaded out of{" "}
              <b>{Pluralize("document", requested, true)}</b>
              {" "}requested.
      }
)
},[selected, displaySelectionResult, displayActionResult])

结论是,我希望减少useEffect中的useEffect表达式,但它似乎不起作用。有人能帮我一把告诉我我做错了什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-03 08:53:41

这与useEffect挂钩无关。问题是,您正在直接在if值中创建一个setState语句。

setState希望得到一个回调,这样就不能工作了。但是,您可以通过使用if-语句传入回调来实现所需的结果:

代码语言:javascript
复制
setState(() => {
  if (condition) {
    return something;
  }

  return somethingElse
})
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62711784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档