【问题标题】:React table search filter work on console window but in react table it not showing filter data反应表搜索过滤器在控制台窗口上工作,但在反应表中它不显示过滤器数据
【发布时间】:2019-09-05 21:54:38
【问题描述】:

我开始学习 reactjs,我已经使用 react 语义 UI 创建了 react 表,我编写的任何代码都适用于控制台日志,但在 UI 中不显示过滤器数据

在此箭头函数中,我将使用 console.log 选项查看过滤器名称值。 请检查下面的代码以获得更多理解。

filterList = e => {

}

import React, { Component } from 'react';
import { Table, Grid, Header, Button, Input } from 'semantic-ui-react'
import { Link } from 'react-router-dom';

export default class ProjectDashBoardList extends Component {
    constructor(props){
        super(props);
        let presets = {
            projectListArray: []
        }
        this.state = {
            filterData: [],
            value: ""
        }
        this.state = presets;
    }

    handleChange = e => {
        this.setState({
            filterData: this.state.projectListArray
        });
    };

    filterList = e => {
        const filterDataName = this.state.projectListArray.filter(item => {
            return ( item.customer_name.toLowerCase().search(e.target.value.toLowerCase()) !== -1 );
        });
        this.setState({ filterData: filterDataName });
        console.log('Filter Customer name:', filterDataName);
    };

    render(){
        const filterDataName = this.state.projectListArray            
        return(
            <div>
                <form>
                    <Input icon='search' placeholder='Search by name.' onClick={this.handleChange} onChange={this.filterList} className="searchfield" />
                </form>

                <Table celled selectable >
                    <Table.Header>
                        <Table.Row>
                            <Table.HeaderCell className="headId">Serial No</Table.HeaderCell>
                            <Table.HeaderCell>Customer</Table.HeaderCell>
                            <Table.HeaderCell>Project No</Table.HeaderCell>
                            <Table.HeaderCell>Start Date</Table.HeaderCell>
                            <Table.HeaderCell>Action</Table.HeaderCell>
                        </Table.Row>
                    </Table.Header>
                    <Table.Body>
                        { filterDataName.map((item, index) => 
                        <Table.Row key={item.id} className="btnHover">
                            <Table.Cell>{item.id}</Table.Cell>
                            <Table.Cell >
                                <Link to={`./customer-details/${item.id}`}>{item.customer_name}</Link>
                            </Table.Cell>
                            <Table.Cell>{item.proj_id}</Table.Cell>
                            <Table.Cell>{item.start_date}</Table.Cell> 
                            <Table.Cell>
                                <Button positive onClick={item.skp_snap_url}>Download</Button>
                                <Button negative onClick={this.projectRemove(item)}>Delete</Button>
                            </Table.Cell>
                        </Table.Row>)}
                    </Table.Body>
                </Table>
            </div>
        )
    }
}

当我在搜索框中输入名称时,我想在表格中显示过滤器值。

【问题讨论】:

  • 你能提供codepen/sanbox链接吗?这会很有帮助
  • @nayan-patil 您正在过滤并将数据设置为名为 filterDatastate variable,但在渲染中您使用的是不同的 state variable(这是未过滤的数据集)this.state.projectListArray,将const filterDataName = this.state.projectListArray 替换为const filterDataName = this.state.filterData
  • @Anuja in const filterDataName = this.state.projectListArray 我正在从数据库中获取值并显示表中的数据,如果我更改此设置,则代码无法正常工作。请检查handleChange箭头功能。
  • @NayanPatil 只需维护 unfiltered 变量中的所有数据 projectListArray 并将其复制到 filterData 变量中,一开始,使用 filterData 渲染 &lt;Table.Row/&gt; s。过滤projectListArray 并将其设置为“filterData”,就像您所做的那样。
  • @Anuja 你能把你现在说的任何东西写成代码,这样我就会明白这一点,我按照我的理解试过了,但它不起作用。

标签: reactjs


【解决方案1】:

只需维护您的unfiltered 变量中的所有数据projectListArray 并将其复制到filterData 变量中,一开始,使用filterData 渲染&lt;Table.Row/&gt;s。过滤projectListArray 并将其设置为filterData,就像您所做的那样。我不明白你projectListArray 来自哪里,我只是假设它来自props(如果我错了,请纠正我,会相应地编辑)

检查 codesandbox : https://codesandbox.io/s/hungry-boyd-5yqyn?fontsize=14

import React, { Component } from 'react';
import { Table, Grid, Header, Button, Input } from 'semantic-ui-react'
import { Link } from 'react-router-dom';

export default class ProjectDashBoardList extends Component {
    constructor(props){
        super(props);
        this.state = {
            filterData: props.projectListArray,
            value: ""
        }
    }

    handleChange = e => {
        this.setState({
            value: e.target.value,
            filterData : this.filterList(e.target.value)
        });
    };

    filterList = value => {
        return this.props.projectListArray.filter(item => {
            return ( item.customer_name.toLowerCase().search(value.toLowerCase()) !== -1 );
        });
    };

    render(){
        const filterDataName = this.state.filterData            
        return(
            <div>
                <form>
                    <Input icon='search' value={this.state.value} placeholder='Search by name.' onChange={this.handleChange} className="searchfield" />
                </form>

                <Table celled selectable >
                    <Table.Header>
                        <Table.Row>
                            <Table.HeaderCell className="headId">Serial No</Table.HeaderCell>
                            <Table.HeaderCell>Customer</Table.HeaderCell>
                            <Table.HeaderCell>Project No</Table.HeaderCell>
                            <Table.HeaderCell>Start Date</Table.HeaderCell>
                            <Table.HeaderCell>Action</Table.HeaderCell>
                        </Table.Row>
                    </Table.Header>
                    <Table.Body>
                        { filterDataName.map((item, index) => 
                        <Table.Row key={item.id} className="btnHover">
                            <Table.Cell>{item.id}</Table.Cell>
                            <Table.Cell >
                                <Link to={`./customer-details/${item.id}`}>{item.customer_name}</Link>
                            </Table.Cell>
                            <Table.Cell>{item.proj_id}</Table.Cell>
                            <Table.Cell>{item.start_date}</Table.Cell> 
                            <Table.Cell>
                                <Button positive onClick={item.skp_snap_url}>Download</Button>
                                <Button negative onClick={this.projectRemove(item)}>Delete</Button>
                            </Table.Cell>
                        </Table.Row>)}
                    </Table.Body>
                </Table>
            </div>
        )
    }
}

【讨论】:

  • 来自我存储在 projectListArray 中的 aws 数据库值。
  • @NayanPatil 添加了codesandbox
  • 我尝试了代码和框代码,但它给了我无法读取未定义的属性映射。
  • @NayanPatil 在将其集成到您的代码或 codesandbox 本身之后?
  • 在我的代码中集成后或者在这里我在沙箱中添加了代码所以请检查它,我从数据库 aws dynamodb 表中获取数据codesandbox.io/s/nice-breeze-7g6vh?fontsize=14
猜你喜欢
  • 1970-01-01
  • 2019-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-24
  • 2023-03-20
  • 2018-08-15
相关资源
最近更新 更多