React练手小项目之简易电商管理系统

结构及组件拆分

代码

All.jsx

import React, { Component } from 'react';

import Heard from './heard'
import Table from './Table'

import './All.css'
import img1 from './images/dn1.jpg'
import img2 from './images/dn2.jpg'
import img3 from './images/dn3.jpg'
import img4 from './images/dn4.jpg'
import img5 from './images/dn5.jpg'

class All extends Component {
    state = {
        arr:[
            {url:img1,msg:'APPLEMacBookAir13.3英寸',price:6488.00,calsses:1,id:1},
            {url:img2,msg:'小米(MI)Air13.3英寸',price:4996.00,calsses:1,id:2},
            {url:img3,msg:'机械革命(MERHREVO)',price:5678.00,calsses:1,id:3},
            {url:img4,msg:'联想(Lenovo)拯救者R720',price:5999.00,calsses:1,id:5},
            {url:img5,msg:'联想(Lenovo)小新潮7000',price:6488.00,calsses:1,id:4}
        ],
        classarr:[
            "冰箱","电脑","手机"
        ],
        

    }

    // 新增与修改逻辑
    handers = (val) =>{

        console.log(val);
        if(val.addurl == '' ||val.addmsg == ''||val.addclasses == '' || val.addprice==''){
            alert('不能为空')
            return
        }
        var arr1 = this.state.arr
        // 判断id是否为空,空就新增,有就修改
        if(val.addid != null){
            for (let index = 0; index < arr1.length; index++) {
                if(arr1[index].id === val.addid){
                    var num = index
                    break
                }
            }
            arr1[num].url = val.addurl
            arr1[num].msg = val.addmsg
            arr1[num].calsses = val.addclasses
            arr1[num].price = val.addprice
        }else{
            arr1.push({
                id:new Date().getTime(),
                url:require(`./images/${val.addurl}.jpg`),
                msg:val.addmsg,
                price:val.addprice,
                calsses:val.addclasses
            })
        }

        this.setState({
            msg:'新增',
            arr:arr1
        })
    }
    // 删除逻辑
    delHander = (val) =>{

        var arr2  = this.state.arr
        arr2.splice(val,1)
        this.setState({
            arr:arr2
        })
    }
    // 
    render() {
        return (
            <div className='big'>
                <h1>商品后台管理系统</h1>
                
                <Heard handers = {this.handers} />
                
                <Table arr = {this.state.arr}  delHander = {this.delHander} />
            </div>
        );
    }
}

export default All;

heard.jsx

import React, { Component } from 'react';
import Bus from './Bus';
class Heard extends Component {
    constructor(props){
        super(props)
        this.url = React.createRef();
        this.msg = React.createRef();
        this.price = React.createRef();
        this.classes = React.createRef();
    }
    state = {

        addid:null,
        addurl:'',
        addmsg:'',
        addprice:'',
        addclasses:1,
        btnmsg:'新增',
       
    }
    valChange = (e) =>{
        this.setState({
            addurl:e.target.value
        })
    }
    msgChange = (e) =>{
        this.setState({
            addmsg:e.target.value
        })
    }
    priChange = (e) =>{
        this.setState({
            addprice:e.target.value
        })
    }
    optChange = (e) =>{
        // console.log(e.target.value);
        this.setState({
            addclasses:e.target.value
        })
    }
    hander = ()=>{
        var arr = []
        arr.url = this.state.addurl
        arr.msg = this.state.addmsg
        arr.price = this.state.addprice
        arr.classes = this.state.addclasses
        // console.log(arr);
        this.setState({
            arr1:arr
        })
    }
    componentDidMount(){
        Bus.addListener('sayhello',this.changeMsg)
    }
    componentWillUnmount(){
        Bus.removeListener('sayhello',this.changeMsg)
    }
    changeMsg = (val)=>{
        // console.log(val);
        this.setState({
            addmsg:val.msg,
            addprice:val.price,
            addurl:val.url,
            addclasses:val.calsses,
            btnmsg:'修改',
            addid:val.id
        })

    }
    handers= () =>{
        this.setState({
            addid:null,
            addurl:'',
            addmsg:'',
            addprice:'',
            addclasses:'2',
            btnmsg:'新增',
        })

        this.props.handers(this.state)
    }
    render() {
        return (
            <div className='heard'>
                图片地址:<input type="text" value={this.state.addurl} onChange={this.valChange} ref={this.url}/>
                简介:<input type="text" value={this.state.addmsg} onChange={this.msgChange} ref={this.msg}/>
                价格:<input type="text" value={this.state.addprice} onChange={this.priChange} ref={this.price}/>
                类别:
                <select ref={this.classes} onChange={this.optChange} value={this.state.addclasses}>
                    <option value="0">冰箱</option>
                    <option value="1">电脑</option>
                    <option value="2">手机</option>
                    </select>
                <button onClick={() => this.handers(this.state)}>{this.state.btnmsg}</button>

            </div>
        );
    }
}

export default Heard;

Table.jsx

import React, { Component } from 'react';

import Bus from './Bus';
class Table extends Component {
    changeHander =(val)=>{
        // console.log(val);
        Bus.emit('sayhello',val)
    }
    state ={
        classarr:[
            "冰箱","电脑","手机"
        ]
    }
    render() {
        return (
            <>
                <table>
                    <thead>
                        <tr>
                            <th>图片</th>
                            <th>简介</th>
                            <th>价格</th>
                            <th>类别</th>
                            <th>操作</th>
                        </tr>
                    </thead>
                    <tbody>
                        {
                            this.props.arr.map((item,index) =>{
                                return <tr key={index}>
                                    <td><img src={item.url} alt="" /></td>
                                    <td>{item.msg}</td>
                                    <td>¥{item.price}</td>
                                    <td>{this.state.classarr[item.calsses]}</td>
                                    <td><button onClick={ () => this.changeHander(item)}>修改</button><button onClick={() => this.props.delHander(index)}>删除</button></td>
                                </tr>
                            })
                        }
                    </tbody>
                </table>
            </>
        );
    }
}

export default Table;

Bus.js

import { EventEmitter } from 'events'
export default new EventEmitter()

运行结果 

 

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大聪明码农徐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值