【问题标题】:How to get React state to only change one item being returned in a .map?如何获得 React 状态以仅更改 .map 中返回的一项?
【发布时间】:2021-09-07 18:15:31
【问题描述】:

似乎我在下面编写代码的方式是,当 setLoading==true 时,它​​会将我的所有按钮更改为加载状态 (true),而我只希望更改被单击的按钮。为了进一步解释,我只是在加载==true 时在按钮上显示一个微调器。关于如何让它正常运行的任何想法?我认为这是一个关键问题,但事实并非如此,因为我对返回的每个元素都有一个唯一的键。

非常感谢大家!

        //Function called to set the state 
        const [loading, setLoading] = useState(false);

        exampleArray.map((exampleObject, index) => {
          return(
            <div className={resulStyle.result} key={exampleObject.hash}>
                <button key={exampleObject} onClick = {() => {router.push(`/queryFamily/${exampleObject.hash}`); setLoading(true);}}>{loading ? 
                <div className="spinner-box">
                <div className="pulse-container small">  
                  <div className="pulse-bubble pulse-bubble-1"></div>
                  <div className="pulse-bubble pulse-bubble-2"></div>
                  <div className="pulse-bubble pulse-bubble-3"></div>
                </div>
              </div>
                : "View Pricing"}</button>
              </div>
            </div>
          )
        })

【问题讨论】:

    标签: javascript css reactjs state


    【解决方案1】:

    捕获作为 currentButtonLoading(或其他)单击的按钮的 id/唯一标识符:映射时,查看该唯一标识符是否 === currentButtonLoading,然后使用您的加载状态仅影响该单个按钮。

    【讨论】:

      【解决方案2】:

      由于加载是在状态级别设置的变量,它将用于您呈现的所有按钮。 为什么不使用另一个状态变量

      const [currentButtonIndex, setCurrentButtonIndex] = useState();

      然后点击设置 setCurrentButtonIndex(index)

      在条件下使用 index===currentButtonIndex && 加载

      【讨论】:

        【解决方案3】:

        嗯,是的,你应该期望会是这样。在这里,您有一个组件,并且您将字符串值作为状态。如果你将此状态更改为true,React 会以加载状态渲染所有按钮。

        解决方案是为您的按钮创建一个组件并将状态保留在那里并在此处使用该组件。

        该按钮组件的示例如下所示:

        function MyButton() {
          const [loading, setLoading] = useState(false);
        
          return loading ? <Spinner /> : <button onClick={() => {your_thing; setLoading(true);}}>Something!</button>
        }
        

        【讨论】:

        • 我认为这是解决方案 - 谢谢 :) 自从我使用 React 已经有一段时间了
        • 非常欢迎!如果您认为我的回答能很好地解决您的问题,请考虑接受我的回答
        • 当然!它不会让我等待 7 分钟,但一旦计时器到了,我就会这样做。
        猜你喜欢
        • 2021-08-01
        • 1970-01-01
        • 2022-01-11
        • 2019-06-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多