0.5.5 • Published 5 months ago

@moln/data-source v0.5.5

Weekly downloads
-
License
MIT
Repository
-
Last release
5 months ago

data-source

GitHub Actions: Run tests Coverage Status GitHub license npm

便捷性管理集合数据状态操作,用于 vue, react 等视图应用库

依赖

  • mobx
  • axios

安装

npm install @moln/data-source

或者使用 yarn

yarn add @moln/data-source

使用

const resources = new Resources()
const dataSource = resources.create("/api/users")

dataSource.fetch();  // GET /api/users
console.log(dataSource.data) // Response collections

const item = dataSource.get(1) // Get item by primary 
item.name = "foo"

// Sync changes 
dataSource.sync()
// PATCH /api/users/1
// Body: {"name":"foo"}

React + Mobx

import {Table, Button} from 'antd'
import {observer} from "mobx-react-lite"
const useDataSource = (resource) => {
    /// Request restful resource
    return useMemo(() => (new Resources()).createDataSource(`/api/${resource}`), []);
    
    // Array data source
    // return useMemo(() => (new Resources()).createDataSource([
    //     {id: 1, name: 'Tom', score: 3},
    //     {id: 2, name: 'Jerry', score: 4},
    // ]), []);
}
const App = observer(() => {
    const ds = useDataSource("users")
    const handleDelete = (row) => {
        ds.remove(row)
        ds.sync() // Sync data source changes, request `DELETE /users/{id}`
    }
    const handleIncrScore = (row) => {
        row.score++
        ds.sync() // Sync data source changes, request `PATCH /users/{id}`, body: `{"score": 3}`
    }
    return (
        <Table
            rowKey={ds.primary}
            dataSource={ds.data}
            loading={ds.loading}
            columns={[
                {
                    dataIndex: 'id',
                    title: '#',
                },
                {
                    dataIndex: 'name',
                    title: 'Name',
                },
                {
                    dataIndex: 'score',
                    title: 'score',
                },
                {
                    render: (row) => {
                        return <Button onClick={() => handleIncrScore(row)}>Incr</Button>
                        return <Button loading={ds.loadings.syncing} onClick={() => handleDelete(row)}>Delete</Button>
                    }
                },
            ]}
        />
    )
})
0.5.4

5 months ago

0.5.3

5 months ago

0.5.5

5 months ago

0.5.0

5 months ago

0.5.2

5 months ago

0.5.1

5 months ago

0.4.5

3 years ago

0.4.4

3 years ago

0.4.3

3 years ago

0.4.2

3 years ago

0.4.1

4 years ago

0.4.0

4 years ago

0.3.17

4 years ago

0.3.20

4 years ago

0.3.19

4 years ago

0.3.18

4 years ago

0.3.16

4 years ago

0.3.15

4 years ago

0.3.14

4 years ago

0.3.13

4 years ago

0.3.12

4 years ago

0.3.11

4 years ago

0.3.10

4 years ago

0.3.9

4 years ago

0.3.8

4 years ago

0.3.7

4 years ago

0.3.6

4 years ago

0.3.5

4 years ago

0.3.4

4 years ago

0.3.3

4 years ago

0.3.2

4 years ago

0.3.1

4 years ago

0.3.0

4 years ago

0.2.13

4 years ago

0.2.12

4 years ago

0.2.11

4 years ago

0.2.10

4 years ago

0.2.9

4 years ago

0.2.8

4 years ago

0.2.7

4 years ago

0.2.6

4 years ago

0.2.5

4 years ago

0.2.3

4 years ago

0.2.4

4 years ago

0.2.1

4 years ago

0.2.2

4 years ago

0.2.0

4 years ago

0.1.4

5 years ago

0.1.3

5 years ago

0.1.2

5 years ago

0.1.1

5 years ago

0.1.0

5 years ago