【问题标题】:datatable component re renders everytime a state changes每次状态更改时数据表组件都会重新呈现
【发布时间】:2020-06-30 20:35:22
【问题描述】:

我已经使用 react-data-table-component 包创建了可重用的数据表组件。

    // these are the states I am using in the component
    // since parent component doesn't need to know about pages, total rows. I decided to 
    // define them inside the component and manage them from here. 

    const [data, setData] = useState([]);
    const [rows, setRows] = useState(10);
    const [totalRows, setTotalRows] = useState(0);
    const [page, setPage] = useState(1);


    useEffect(()=>{
       ApiService.createTransaction(data).then((response)=>{
        setData(response.data)
        setTotalRows(response.recordsFiltered);
        setPage(_page);
        props.setLoading(false);
      })
    },[])

我就是这样使用这个组件的

 <CustomDatatable {parameters}/>

问题是,在我收到响应并尝试设置状态数据后,每次设置任何状态时都会呈现组件。我怎样才能停止重新渲染。非常感谢任何帮助。

【问题讨论】:

    标签: reactjs react-hooks


    【解决方案1】:

    您可以使useEffect 依赖于变化的变量,方法是将该变量添加到依赖数组中,这是useEffect 的第二个参数。像这样:

        useEffect(()=>{
           ApiService.createTransaction(data).then((response)=>{
            setData(response.data)
            setTotalRows(response.recordsFiltered);
            setPage(_page);
            props.setLoading(false);
          })
        },[data])
    

    现在useEffect 仅在data 更改时运行。您可以在该数组中添加其他内容以赋予它更多依赖关系。

    【讨论】:

    • 问题出在其他地方,假设当我使用 setDdata、setTotalRows 更新状态时,setPage 组件重新呈现。我不想依赖 useEffect 调用
    • 所以你想只调用一次 api 吗?喜欢在组件安装上?
    • 是的,工作正常。但是每次我尝试更新状态时都会呈现组件。我想阻止它。
    • 就像我有 3 个状态,所以组件使用 setstates 渲染 3 次
    • 根据您所写的内容,使用空依赖数组,useEffect 不应该随着您的其他状态变量的更改而一次又一次地运行。这里一定有其他事情发生。
    猜你喜欢
    • 2021-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-12
    • 1970-01-01
    • 2019-01-09
    • 1970-01-01
    相关资源
    最近更新 更多