gpt4 book ai didi

javascript - react - 使用 react-table 超出最大更新深度

转载 作者:行者123 更新时间:2023-12-05 00:27:35 26 4
gpt4 key购买 nike

尝试将 react-table 包含在一个基本应用程序中,该应用程序在字段中接受输入,当字段内容更改时将其存储在组件状态中,然后在按下按钮时从 Github 获取数据。
一切正常,直到我添加该行const tableInstance = useTable({columns, data})该页面将正常加载,但是当输入字段发生更改(即您在其中键入)时,应用程序会因错误而崩溃:
错误:超过最大更新深度。当组件在 componentWillUpdate 或 componentDidUpdate 中重复调用 setState 时,可能会发生这种情况。 React 限制了嵌套更新的数量以防止无限循环。
堆栈跟踪包括来自 react-table 库的这些片段
钩子(Hook)/useColumnVisibility.js

  204 | 
205 | useMountedLayoutEffect(() => {
206 | if (getAutoResetHiddenColumns()) {
> 207 | dispatch({ type: actions.resetHiddenColumns })
208 | ^ }
209 | }, [dispatch, columns])
210 |
和 publicUtils.js:
  153 | 
154 | safeUseLayoutEffect(() => {
155 | if (mountedRef.current) {
> 156 | fn()
157 | ^ }
158 | mountedRef.current = true
159 | // eslint-disable-next-line
这是我的 App.js 文件中的代码
import React, { useState } from 'react';
import './App.css';
import {useTable} from "react-table"

function App() {

const [data, setData] = useState([]);
const [keyword, setKeyword] = useState('');

const fetchData = () => {
const url = `https://api.github.com/search/repositories?q=${keyword}`
fetch(url)
.then(response => response.json())
.then(responseData => {
setData(responseData.items);
});
}

const handleChange = (e) => {
setKeyword(e.target.value);
}

const columns = [{
Header: 'Name', //column header
accessor: 'full_name' //Value accessor
}, {
Header: 'URL',
accessor: 'html_url'
}, {
Header: 'Owner',
accessor: 'owner.login'
}]

const tableInstance = useTable({columns, data}) // line causing the problem

return (
<div className="App">
<input type="text" onChange={handleChange}/>
<button onClick={fetchData} value={keyword} >Fetch</button>
</div>
);
}

export default App;
据推测,我做了一些事情,导致每次呈现页面时都会更新状态,从而导致另一个呈现,但我无法弄清楚它是什么。提前感谢您的帮助。

最佳答案

好的,所以我通过制作一个 Table 组件来解决这个问题,然后将其包含在 App 组件 DOM 中。
这是解决问题的更新代码

import React, { useState } from 'react';
import './App.css';
import {useTable} from "react-table"

function Table({columns, data}){

const {
getTableProps,
getTableBodyProps,
headerGroups,
rows,
prepareRow,
} = useTable({columns, data})

return (
<table {...getTableProps()}>
<thead>
{
headerGroups.map(headerGroup => (
<tr {...headerGroup.getHeaderGroupProps()}>
{
headerGroup.headers.map( column => (
<th {...column.getHeaderProps()}>
{
column.render('Header')
}
</th>
))
}
</tr>
))
}
</thead>
<tbody {...getTableBodyProps()}>
{ // loop over the rows
rows.map(row => {
prepareRow(row)
return (
<tr {...row.getRowProps()}>
{ // loop over the rows cells
row.cells.map(cell => (
<td {...cell.getCellProps()}>
{cell.render('Cell')}
</td>
))
}
</tr>
)
})
}
<tr>
<td></td>
</tr>
</tbody>
</table>
);
}

function App() {

const [data, setData] = useState([]);
const [keyword, setKeyword] = useState('');

const fetchData = () => {
const url = `https://api.github.com/search/repositories?q=${keyword}`
fetch(url)
.then(response => response.json())
.then(responseData => {
setData(responseData.items);
});
}

const handleChange = (e) => {
setKeyword(e.target.value);
}

const columns = [{
Header: 'Name', //column header
accessor: 'full_name' //Value accessor
}, {
Header: 'URL',
accessor: 'html_url'
}, {
Header: 'Owner',
accessor: 'owner.login'
}]


return (
<div className="App">
<input type="text" onChange={handleChange}/>
<button onClick={fetchData} value={keyword} >Fetch</button>
<Table
columns={columns}
data = {data}
/>
</div>
);
}

export default App;
问题是我真的不知道为什么会这样,或者问题的症结是什么。

关于javascript - react - 使用 react-table 超出最大更新深度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63549751/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com