无法在 React.js 中使用 useState 进行渲染

意大利面代码

我正在使用 reactjs 创建一个排序算法可视化工具。调用气泡排序函数后,useState 更新列表从而触发重新渲染。但新列表没有注入到 dom。实现是使用(功能组件)和一些钩子完成的。-反应的新手

下面是代码片段

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


const ArrayBars = ()=>{

const [list, setlist] = useState([]);


function BubbleSort(){
    let arr=list
    for(var i=0;i<arr.length-1;i++){
        for(var j=i+1;j<arr.length;j++){
            if(arr[i] > arr[j]){
                let temp = arr[i];
                arr[i]=arr[j];
                arr[j]=temp;
            }
        }
    }
    setlist(arr)
}


    // Generate an array:
    function generatearray(){
        const sliderValue=document.getElementById('slide').value;
        const arr = []
        for(let i=0;i<sliderValue;i++){
            const Bar_height = Math.floor(Math.random() * (760 - 400 + 1) ) + 400;
            arr.push(Bar_height);
        }
        setlist(arr);
    }

    return(
        <div>
            <div className="header mt-4 p-3 mb-3">
                <div className="slider">
                    <label>array Size :</label>
                    <input type="range" min="10" max="100" id="slide" ></input>
                    <button type="button" className="btn btn-success" onClick={generatearray}>Generate array</button>
                </div>
                <div className="btns">
                    <button type="button" className="btn btn-outline-info p-3" onClick={BubbleSort}>Bubble Sort</button>
                    <button type="button" className="btn btn-outline-info p-3">Selection Sort</button>
                    <button type="button" className="btn btn-outline-info p-3">Insertion Sort</button>
                    <button type="button" className="btn btn-outline-info p-3">Merge Sort</button>
                    <button type="button" className="btn btn-outline-info p-3">Quick Sort</button>
                </div>
            </div>
            <div className="array px-5 d-flex justify-content-center">
                {                   
                    list.map((height,idx)=>{
                        return(
                            <div id={idx} className="bars" style={{height:`${height}px`}}></div>
                        )
                    })
                }

            </div>
        </div>
    )
}

export default ArrayBars;
德鲁里斯

您正在改变list状态对象并将其保存回状态,因此list数组引用永远不会改变并且 React 重新渲染。

先浅拷贝,再更新。

function BubbleSort(){
    let arr = [...list]; // <-- shallow copy state array
    for (let i = 0; i < arr.length - 1; i++) {
        for (let j = i + 1; j < arr.length; j++) {
            if (arr[i] > arr[j]) {
                let temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
        }
    }
    setlist(arr)
}

有趣的事实:您可以使用数组解构赋值在一行中交换两个数组元素。

[arr[j], arr[i]] = [arr[i], arr[j]];

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

无法在类组件React.js中使用useState

在React useState中使用(或||)语法进行赋值

react js无法使用useState更新按钮状态

React.js useState钩子导致重新渲染太多,无法更新我的状态

太多重新渲染 React JS - useState

React useState 不使用對象渲染

无法使用useState更改React状态

使用 useState 钩子更改状态后,React JS 代码不会重新渲染

在 React Native 中使用 useState

无法在回调内部调用React Hook的“ useState”。使用useMediaQuery响应式JS媒体查询

React Js使用useState创建动画

如何在React中使用useState或条件渲染隐藏和显示组件?

在React中使用useState钩子为多个设置状态渲染一次

无法在 React 中使用 useState 动态设置文本字符串

无法在React Native中使用地图渲染数组元素

日期设置无法在反应“ useState”中使用

如何在React JS中使用useState更改单击特定组件时的状态?

React组件使用useState渲染两次

使用react usestate挂钩防止为每个setstate重新渲染

React没有使用useState钩子触发重新渲染

使用 UseState Hook 后 React 组件不会重新渲染

如何防止使用 useState 的 React const 重新渲染

不渲染项目React useState

在React Native中使用false值进行条件渲染的问题

在React中使用嵌套状态进行渲染优化

在React中使用Array中的数组进行循环渲染

在 React 中使用 useState 挂钩更新对象

无法使用useState React将道具设置为状态

如何在 React JS 渲染方法中使用变量?