React + mobx 创建表格并操作数据

Mobx 快速入门

安装依赖项: mobx, mobx-react

npm i mobx mobx-react

定义observable, observer 和 action

1。 定义一个状态对象, 它具有可观察的属性, 我们将它称为 observable,将状态对象传递给 mobx observable()

import {observable} from 'mobx';

let tableState = observable({
    Head: [
        {header: 'Name'},
        {header: 'Job1'},
        {header: 'operation'}
    ],
    Body: [
        {
            name: '李狗蛋',
            job: '程序猿',
            operation: '删除'
        },
        {
            name: '王翠花',
            job: '攻城狮',
            operation: '删除'
        },
        {
            name: '二狗子',
            job: '加班狗',
            operation: '删除'
        }
    ]
});

2。创建一个react组件, 它能够响应 observable 的变化, 我们将它称为 observer

使用 mobx-react observer() 来包裹它.

let Table2 = observer(({tableState}) => {
    return (
        <table className='myTable'>
            <TableHead Head={tableState.Head}/>
            <TableBody Body={tableState.Body}/>
        </table>
    );
})

3。定义更改状态的函数, 我们将它称为 action,

删除表格中的一行。

tableState.removeTr = action((index)=> {
    const Body1 = tableState.Body;
    tableState.Body = Body1.filter((item,position) => {
        return position !== index
    })
})

完整代码:

import React, {Component} from 'react';
import {action, observable} from "mobx";
import {observer} from "mobx-react";

// 定义一个状态对象,它具有可观察的属性,称之为observable
let tableState = observable({
    Head: [
        {header: 'Name'},
        {header: 'Job1'},
        {header: 'operation'}
    ],
    Body: [
        {
            name: '李狗蛋',
            job: '程序猿',
            operation: '删除'
        },
        {
            name: '王翠花',
            job: '攻城狮',
            operation: '删除'
        },
        {
            name: '二狗子',
            job: '加班狗',
            operation: '删除'
        }
    ]
});

const TableHead = (props) => {
    const myHead = props.Head.map((item,index) => {
        return <th key={index}>{item.header}</th>
    });
    return (
        <thead  style={{border:'1px solid blue'}}>
        <tr>{myHead}</tr>
        </thead>
    );
}

const TableBody = (props) => {
    const myBody = props.Body.map((item,index) => {
        return <tr key={index}>
            <td>{item.name}</td>
            <td>{item.job}</td>
            <td><button onClick={() =>tableState.removeTr(index)}>{item.operation}</button></td>
        </tr>
    });
    return (
        <tbody>{myBody}</tbody>
    );
}

//创建一个React组件,将其转化为响应observable的组件
let Table2 = observer(({tableState}) => {
    return (
        <table className='myTable'>
            <TableHead Head={tableState.Head}/>
            <TableBody Body={tableState.Body}/>
        </table>
    );
})

//定义更改状态的函数,称之为action,更改observable
tableState.removeTr = action((index)=> {
    const Body1 = tableState.Body;
    tableState.Body = Body1.filter((item,position) => {
        return position !== index
    })
})

// 每隔1秒钟增加一行
// let count =0;
// setInterval(action(()=> {
//     tableState.Body = [...tableState.Body, tableState.Body[count]];
//     count++;
// }), 1000);

class TableMobx extends Component {
    render() {
        return (
            <Table2 tableState={tableState}/>
        );
    }
}

export default  TableMobx;

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值