【发布时间】:2020-08-09 13:07:36
【问题描述】:
在我的 React 代码中,我有一个员工页面,它同时呈现一个表组件和一个过滤器组件。 Filter 代码对存储在Employees 页面中的一些数据进行操作,然后通过useEffect 更新Filter 的状态。有问题的数据作为 prop 传递给 Filter 组件和 Table 组件。但是,发生此更改时,只有 Filter 组件会重新渲染。下面的代码摘录。 过滤函数示例:
function filterFunction() {
let spliceArray = [];
if ($('#firstNameFilter').val() !== '') {
for (let i = 0; i < props.employees.length; i++) {
if(props.employees[i].firstName !== $('#firstNameFilter').val()) {
spliceArray.push(i);
}
}
for (let i = spliceArray.length - 1; i >= 0; i--) {
props.employees.splice(spliceArray[i], 1);
}
}
setUseFilter(true);
}
主页上的员工数组示例:
let employees = [
{
_id: 2,
firstName: 'Some',
lastName: 'One',
department: 'Somewhere',
jobTitle: 'Something',
email: 'ghi@jkl.com',
phoneExtension: 67890
},
]
表格渲染代码示例:
<tbody>
{props.employees.map((employee) => {
<tr>
<td><i id={employee._id + "upd"} className="fas fa-edit" onClick={handleEdit}></i></td>
<td><i id={employee._id + "del"} className="fas fa-trash-alt" onClick={deleteEmployee}></i></td>
<td>{employee.firstName}</td>
<td>{employee.lastName}</td>
<td>{employee.department}</td>
<td>{employee.jobTitle}</td>
<td>{employee.email}</td>
<td>{employee.phoneExtension}</td>
</tr>
</tbody>
因此,理想情况下,过滤器会更新员工数组,然后表格将使用更新后的数组重新渲染,以仅反映每个过滤器的数组的适当部分。但是,当前数组正在更新,但表格没有重新渲染。
我对 React 比较陌生,但我的理解是组件会在其状态或道具发生变化时重新渲染。虽然我不知道如何从 Filter 组件中更改 Table 组件的状态,但似乎应触发它的 employees 数组属性的更改。
感谢任何帮助。
根据请求,完整的员工文件如下:
import React from 'react';
import Title from '../components/Title/Title.js';
import Table from '../components/Table/Table.js';
import Filter from '../components/Filter/Filter.js';
import { Container, Row, Col } from '../components/Grid/Grid.js';
import axios from 'axios';
let employees = [
{
_id: 2,
firstName: 'Some',
lastName: 'One',
department: 'Somewhere',
jobTitle: 'Something',
email: 'ghi@jkl.com',
phoneExtension: 67890
},
{
_id: 3,
firstName: 'Test',
lastName: 'McTester',
department: 'Sales',
jobTitle: 'Seller',
email: 'mno@pqr.com',
phoneExtension: 13579
}];
let employeesControl = [
{
_id: 2,
firstName: 'Some',
lastName: 'One',
department: 'Somewhere',
jobTitle: 'Something',
email: 'ghi@jkl.com',
phoneExtension: 67890
},
{
_id: 3,
firstName: 'Test',
lastName: 'McTester',
department: 'Sales',
jobTitle: 'Seller',
email: 'mno@pqr.com',
phoneExtension: 13579
}];
function Employees() {
return(
<Container fluid>
<Row>
<Col size="md-12">
<Title>Employee Directory</Title>
</Col>
</Row>
<Row>
<Col size="md-12">
<Filter employees={employees} employeesControl={employeesControl}/>
</Col>
</Row>
<Row>
<Col size="md-12">
<Table employees={employees} />
</Col>
</Row>
</Container>
);
}
export default Employees;
【问题讨论】:
-
请添加
Filter和Table组件代码的父级,可能是那里的问题
标签: javascript reactjs