react文档demo 交互式表格

本文介绍了一个使用React构建的产品筛选器应用,通过输入搜索和勾选选项,用户可以过滤显示的产品列表。文章展示了如何使用props传递数据,state进行状态管理和组件之间的交互。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用props传递静态数据,state进行状态更新。

import React from 'react';
import ReactDOM from 'react-dom';
// import './index.css';
// import App from './App';
// import * as serviceWorker from './serviceWorker';

// ReactDOM.render(<App />, document.getElementById('root'));

// If you want your app to work offline and load faster, you can change
// unregister() to register() below. Note this comes with some pitfalls.
// Learn more about service workers: https://bit.ly/CRA-PWA
// serviceWorker.unregister();

function Search(props) {
    function handlechange(e){
        props.onChange(e.target.checked);
    }
    function handletext(e){
        props.onChangetext(e.target.value);
    }
    return (
        <div>
            <input type="text" name="" placeholder="Search..." onChange={handletext}/>
            <div>
                <input type="checkbox" onChange={handlechange}/><span>Only show products in stock</span>
            </div>
        </div>
    )
}
function Row(props){
    let data=props.data;
    const list=props.data.map((x,i)=>{
        return (
            <li key={i}><span>{x.name}</span><span>{x.price}</span></li>
        )
           
        
    })
    console.log(list)
    return (
        <div>
            <div>{props.name}</div>
            <ul>
            {list}
            </ul>
        </div>
    )
}
function Product(props) {
    const length=props.data.length;
    if(length == 0) return (
        <div></div>
    );
    const name1=props.data[0].category,name2=props.data[length-1].category;
    const list1=props.data.filter(x=>{ if(x.category === name1) return x; })
    const list2=props.data.filter(x=>{ if(x.category === name2) return x; })
    return (
        <div>
            <div>
                <span>Name</span>
                <span>Price</span>
            </div>
            <Row name={name1} data={list1} />
            <Row name={name2} data={list2} />
        </div>
    );
}
class Filter extends React.Component {
    constructor(props) {
        super(props)
        this.state={text:'',in:false};
        this.onChange=this.onChange.bind(this);
        this.onChangetext=this.onChangetext.bind(this);
    }
    onChange(e){
        this.setState({in:e});
        
    }
    onChangetext(e){
        this.setState({text:e});
        // console.log(this.state);
    }
    render() {
        // console.log(this.props.data);
        let list=[];
      
        let show=this.state.in;
        // console.log(show);
        if(show) {
            list=this.props.data.map((x)=>{
                let tmp={};
                for(let i in x){
                    if(i != 'price') tmp[i]=x[i];
                    // console.log(i);
                }
                // console.log(tmp)
            return tmp;
            })
            // console.log('list',list);
        }else{
            list=this.props.data;
        }
        let test=this.state.text;
        let length =list.length;
        list=list.filter((x)=>{
            for(var i in test){
                console.log(test[i].toLocaleLowerCase(),x.name[i].toLocaleLowerCase());
                if(i>=x.name.length||test[i].toLocaleLowerCase()!=x.name[i].toLocaleLowerCase()) return false;
            }
            return true;
        })
        return (
            <div>
                <Search onChange={this.onChange} onChangetext={this.onChangetext}/>
                <Product data={list}/>
            </div>
        )

    }
}
const data =
    [
        { category: "Sporting Goods", price: "$49.99", stocked: true, name: "Football" },
        { category: "Sporting Goods", price: "$9.99", stocked: true, name: "Baseball" },
        { category: "Sporting Goods", price: "$29.99", stocked: false, name: "Basketball" },
        { category: "Electronics", price: "$99.99", stocked: true, name: "iPod Touch" },
        { category: "Electronics", price: "$399.99", stocked: false, name: "iPhone 5" },
        { category: "Electronics", price: "$199.99", stocked: true, name: "Nexus 7" }
    ];
ReactDOM.render(
    <Filter data={data} />, document.getElementById("root")
)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值