reactjs - 组件没有在 ReactJs 中的输入属性更改时重新渲染
问题描述
我是 ReactJs 的新手。我有一个父组件,我在其中使用 Redux persist(本地存储)管理列表。我传递给 React-table 子组件的相同列表。在一个按钮上单击一个 Modal 弹出,我修改列表的一行。成功更新输入列表后,表不会重新呈现。我将不得不刷新页面以反映表格中的更改。
下面是我的代码:
import React, { useMemo } from 'react';
import { useTable, useSortBy, useGlobalFilter, useFilters, usePagination, useRowSelect } from 'react-table';
import { MdNavigateNext } from "react-icons/md";
import { MdSkipNext } from "react-icons/md";
import { GrFormPrevious } from "react-icons/gr";
import { MdSkipPrevious } from "react-icons/md";
import GlobalFilter from './global-filter/global-filter.component'
import ColumnFilter from './column-filter/column-filter.component';
import Checkbox from './checkbox/checkbox.component';
import './table.style.css';
const SortingTable = props => {
const { payload, COLUMNS } = props;
const columns = useMemo(() => COLUMNS, [])
const [data, setData] = useState([])
useEffect(() => {
setData(payload)
}, [payload])
const {
getTableProps,
getTableBodyProps,
headerGroups,
page,
nextPage,
previousPage,
canNextPage,
canPreviousPage,
prepareRow,
pageOptions,
gotoPage,
pageCount,
setPageSize,
state,
setGlobalFilter,
selectedFlatRows
} = useTable({
columns,
data
}, useFilters,
useGlobalFilter,
useSortBy,
usePagination,
useRowSelect)
const { globalFilter, pageIndex, pageSize } = state
return (
<>
<h1 className="cat-table-header">Category List :</h1>
<GlobalFilter className='global-filter' filter={globalFilter} setFilter={setGlobalFilter} />
<table {...getTableProps()}>
<thead>
{headerGroups.map((headerGroup) => (
<tr {...headerGroup.getHeaderGroupProps()}>
{headerGroup.headers.map((column) => (
<th {...column.getHeaderProps(column.getSortByToggleProps())}>{column.render('Header')}
{/* <div>{column.canFilter ? column.render('Filter') : null} </div> */}
<span>
{column.isSorted ? (column.isSortedDesc ? ' ' : ' ') : ''}
</span>
</th>
))}
</tr>
))}
</thead>
<tbody {...getTableBodyProps()}>
{page.map((row) => {
prepareRow(row)
return (
<tr {...row.getRowProps()}>
{row.cells.map((cell) => {
return <td {...cell.getCellProps()}>{cell.render('Cell')}</td>
})}
</tr>
)
})}
</tbody>
</table>
<div>
<span>
Go to page:{' '}
<input
type='number'
defaultValue={pageIndex + 1}
onChange={e => {
const pageNumber = e.target.value ? Number(e.target.value) - 1 : 0
gotoPage(pageNumber)
}}
style={{ width: '50px' }}
/>
</span>
<span>
Page{' '}
<strong>
{pageIndex + 1} of {pageOptions.length}
</strong>
</span>
<MdSkipPrevious onClick={() => gotoPage(0)} disabled={!canPreviousPage} />
<GrFormPrevious onClick={() => previousPage()} disabled={!canPreviousPage} />
<MdNavigateNext onClick={() => nextPage()} disabled={!canNextPage} />
<MdSkipNext onClick={() => gotoPage(pageCount - 1)} disabled={!canNextPage} />
{'Show'}
<select
value={pageSize}
onChange={e => setPageSize(Number(e.target.value))}>
{[10, 15, 25, 35, 45].map(pageSize => (
<option key={pageSize} value={pageSize}>
{pageSize}
</option>
))}
</select>
</div>
</>
)
}
export default SortingTable;
请帮助解决这个问题。
解决方案
推荐阅读
- java - 如何强制 Java 调用接受不可为空的参数的重载 Kotlin 方法?
- bash - 实验返回解析器错误的具体输入
- reactjs - 事件处理程序中的未定义属性
- json - XML 和 JSON 是否用于在客户端和服务器之间*通信*信息?
- angularjs - 为什么过滤不适用于我在剑道网格中的数据
- reactjs - 从数组生成表的算法?
- java - java - 如何在Java SimpleXML中序列化没有节点的封闭标记
- php - 从表单发送隐藏值的问题
- python - 在 MatPlotLib Graphs 之间切换时如何停止 PyQt5 中出现的多个工具栏?
- angularjs - 带有字符串值的 ng-model 复选框