React第三方组件2(状态管理之Refast的使用⑤LogicRender使用)

本教程总共5篇,每日更新一篇,请关注我们!你可以进入历史消息查看以往文章,也敬请期待我们的新文章!

1、React第三方组件2(状态管理之Refast的使用①简单使用)---2018.01.29

2、React第三方组件2(状态管理之Refast的使用②异步修改state)---2018.01.30

3、React第三方组件2(状态管理之Refast的使用③扩展ctx)---2018.02.31

4、React第三方组件2(状态管理之Refast的使用④中间件middleware使用)---2018.02.01

5、React第三方组件2(状态管理之Refast的使用⑤LogicRender使用)---2018.02.02

开发环境:Windows 8,node v8.9.1,npm 5.5.1,WebStorm 2017.2.2

今天我们来用下Refast的LogicRender!

http://doc.refast.cn/LogicRender.html

LogicRender 是一个配合 Refast 使用的逻辑组件。可以嵌套使用,可以根据条件执行特定的 Action。

废话不多说!撸码开始!

1、安装依赖

npm install refast-logic-render --save

2、配置Decorators

npm i -D babel-plugin-transform-decorators-legacy

修改 .babelrc

"plugins": ["transform-decorators-legacy"]

3、配置demo7

把demo6 复制一份程 demo7

修改 demo下的 Index.jsx

import Dome7 from './demo7/Index'
<NavLink to="/Dome7" activeClassName="selected">demo7</NavLink>
<Route path="/Dome7" component={Dome7}/>

4、撸码

修改 TodoList.jsx

import LogicRender, { connect } from 'refast-logic-render';

完整代码

import React from 'react';
import Refast, {Component} from 'refast';
import LogicRender, {connect} from 'refast-logic-render';
import {Toast} from '../../common/layer';
// 引入 logic.js
import logic from './logic';
import List from './List';
import '../../../public/css/todoList.pcss';

@connect
class TodoList extends Component {
    constructor(props) {
        super(props, logic);
    }

    render() {
        let {list, isLoading, isEmpty} = this.state, {dispatch} = this;
        return (
            <div className="todoList">
                <Toast ref={e => Refast.use('fn', {Toast: e})}/>
                <input type="text" ref="todoInput"/>
                <button onClick={() => this.dispatch('handleAdd', this.refs['todoInput'].value)}>添加</button>
                <LogicRender
                    action={'getTodoList'}
                    isLoading={isLoading}
                    Loading={() => <div>加载中</div>}
                    isEmpty={isEmpty}
                    Empty={() => <div>暂无数据</div>}
                >
                    <div className="cont">
                        <div className="box">
                            全部
                            <List type={0} list={list} dispatch={dispatch}/>
                        </div>
                        <div className="box">
                            未删除
                            <List type={1} list={list} dispatch={dispatch}/>
                        </div>
                        <div className="box">
                            已删除
                            <List type={2} list={list} dispatch={dispatch}/>
                        </div>
                    </div>
                </LogicRender>
            </div>
        )
    }
}

export default TodoList;

修改  logic.js

完整代码

import apiRequestAsync from '../../../public/js/apiRequestAsync';

export default {
    defaults(props) {
        return {
            list: [],
            isLoading: true,
            isEmpty: false
        }
    },
    handleAdd({getState, setState}, title) {
        if (title) {
            let list = getState().list;
            list.push({id: list.length + 1, title: title, status: 1});
            setState({list: list});
        } else {
            alert('不能为空')
        }
    },
    handleItemEdit({getState, setState}, someState) {
        let {id, status} = someState, list = getState().list;
        list.find(data => data.id === id).status = status;
        setState({list: list})
    },
    async getTodoList({setState, fn}) {
        let todoList = {};
        try {
            todoList = await apiRequestAsync.post('todoList');
            setTimeout(() => {
                 //todoList.list = [];   //测试 空数据
                if (todoList.list.length > 0) {
                    fn.Toast.show('操作成功');
                    setState({isLoading: false, list: todoList.list})
                } else {
                    fn.Toast.show('暂无数据');
                    setState({isLoading: false, isEmpty: true})
                }
            }, 2000);
        } catch (error) {
            fn.Toast.show(error);
        }
    }
}

5、测试,看下浏览器

本文完 

禁止擅自转载,如需转载请在公众号中留言联系我们!

感谢童鞋们支持!

如果你有什么问题,可以在下方留言给我们!

来源:React第三方组件2(状态管理之Refast的使用⑤LogicRender使用)-留客客-获客营销saas系统

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值