当前位置: 首页 > 知识库问答 >
问题:

反应:状态有不同的值,这取决于您询问的位置

厉令
2023-03-14

我有一个改变状态的按钮列表,一个字符串(用于决定是否显示一个模态,作为这个模态的标题)。应该发生什么:

    1. 如果没有显示模态,单击这些按钮中的任何一个都应该更改打开模态并设置其标题。

第1点和第3点很好。但2不是。所以我决定在那里放一些console.log。如果我在链接到我的状态的useEffect中登录:每个按钮上的标题状态都会更改,这应该会更改,但它永远不会被清除。

因此,我登录到处理程序函数中(单击按钮时触发):

  • 标题状态始终显示为空字符串,即使模式中有标题

就这样,对我来说没有任何意义。如果有帮助的话,下面是我代码的一部分:

js prettyprint-override">  const [logsModalTitle, setLogsModalTitle] = useState("");
...
  const handlingLogs = (inputClause) => {
    console.log("handling logs : ", showLogsModal, logsModalTitle);
    if (`${inputClause.name}(${inputClause.label})` === logsModalTitle) {
      setLogsModalTitle("");
    } else {
      setLogsModalTitle(`${inputClause.name}(${inputClause.label})`);
    }
  };
...
  <MyCustomButton
                buttonInnerText="ERROR"
                buttonSize="medium"
                buttonActionFunctionOne={handlingLogs}
                buttonActionPropOne={input.clauses[i]}
              />
...
  useEffect(() => {
    console.log(logsModalTitle);
  }, [logsModalTitle]);

共有1个答案

丌官霖
2023-03-14

在我看来,这确实是奇怪的代码,但这可能行得通:

const handlingLogs = (inputClause) => {
  if (`${inputClause.name}(${inputClause.label})` === logsModalTitle) {
    setLogsModalTitle("");
    setShowLogsModal(false);
  } else {
    setShowLogsModal(true);
    setLogsModalTitle(`${inputClause.name}(${inputClause.label})`);
  }
};

您可以只使用一个状态,即showLogsModal=logsModalTitle!=="";

const [logsModalTitle, setLogsModalTitle] = useState("");

const handlingLogs = (inputClause) => {
  if (`${inputClause.name}(${inputClause.label})` === logsModalTitle) {
    setLogsModalTitle("");
  } else {
    setLogsModalTitle(`${inputClause.name}(${inputClause.label})`);
  }
};

const showLogsModal = logsModalTitle !== "";

 类似资料:
  • 我现在正在学习React,但在重新渲染组件时遇到了问题。应用程序。js代码: 问题是不是最新的。它总是弱智,这是以前的状态。我试图调用一个在和的回调中,但是它仍然不起作用,我不知道为什么。

  • 问题内容: 假设我在组件中将状态设置为: 如果在我的代码的其他地方,我有一个包含这些值的键的数组,即,如何循环遍历该数组以找到相应状态值的值? 问题答案: 状态是一个对象 ,因此您可以通过以下方式访问任何值: 使用任何循环等迭代,并通过来访问值,如下所示: 检查以下代码段:

  • 我有一个名为的组件,还有一个子组件名为。智利组件有一个名为的状态。我需要从AvailabiltyCalendar组件访问该状态并获取该状态值。我该怎么做呢。 可用压路机组件 DatePicker组件

  • 问题内容: 所以我有这个: newDealersDeckTotal只是一个数字数组,例如,但是没有给出正确的总数,但是呢?我什至设置了超时延迟,以查看是否可以解决问题。任何明显的还是我应该发布更多代码? 问题答案: 通常是异步的,这意味着在您处于状态时,它尚未更新。尝试将日志放入方法的回调中。状态更改完成后执行:

  • 我在JS对象(不是数组)中有一个