Dva學習筆記

Dva學習筆記

本文是基於Windows 10系統環境,學習和使用Dva:

  • Windows 10

一、dva狀態管理state

(1) 定義一個model文件

  • zufang.js
// zufang.js

export default {

    // 命名空間,全局唯一
    namespace: 'zufang',

    // 狀態管理,存儲數據
    state: {
        visible:true,
        pagination:{
            page:1,
            pageSize:10,
        }
    },

    // 定義同步請求函數,用於處理state的數據
    reducers: {

    },

    // 定義異步請求函數,用於發起異步請求
    effects: {

    },

}

二、獲取dva狀態管理state

(1) 第一種獲取dva管理的state數據方法

  • ZuFang.js
import React, { Component } from 'react'
import { Modal } from 'antd'
import { connect } from 'dva';

// 獲取zufang.js文件中的state管理的數據,並賦值給data
// 小括號中的state爲dva管理的全局state,通過state['zufang']定位到zufang.js文件管理的state
const MapZuFangToProps = (state) => {
    return { data: state['zufang'] };
}

@connect(MapZuFangToProps)
class ZuFang extends Component {

    render() {
        console.log(this.props);
        const { data } = this.props;
        return (
            <div>
                <Modal
                    title='Basic Modal'
                    visible={data.visible}
                >
                    <p>Some contents...</p>
                </Modal>
            </div>
        )
    }
}

export default ZuFang;

(2) 第二種獲取dva管理的state數據方法

  • ZuFang.js
import React, { Component } from 'react'
import { Modal } from 'antd'
import { connect } from 'dva';

// 通過解構的方式獲取
const MapZuFangToProps = (state) => {
    return {
        data: {
            ...state['zufang']
        }
    };
}

@connect(MapZuFangToProps)
class ZuFang extends Component {

    render() {
        console.log(this.props);
        const { data } = this.props;
        return (
            <div>
                <Modal
                    title='Basic Modal'
                    visible={data.visible}
                >
                    <p>Some contents...</p>
                </Modal>
            </div>
        )
    }
}

export default ZuFang;

(3) 第三種獲取dva管理的state數據方法

  • ZuFang.js
import React, { Component } from 'react'
import { Modal } from 'antd'
import { connect } from 'dva';

// 按需加載
const MapZuFangToProps = (state) => {

    return {
        visible: state['zufang'].visible,
    };
}

@connect(MapZuFangToProps)
class ZuFang extends Component {

    render() {
        console.log(this.props);
        const { visible } = this.props;
        return (
            <div>
                <Modal
                    title='Basic Modal'
                    visible={visible}
                >
                    <p>Some contents...</p>
                </Modal>
            </div>
        )
    }
}

export default ZuFang;

(4) 第四種獲取dva管理的state數據方法

  • ZuFang.js
import React, { Component } from 'react'
import { Modal } from 'antd'
import { connect } from 'dva';

// {zufang} 等價於 state['zufang'],將zufang從全局state中解構出來
const MapZuFangToProps = ({ zufang }) => {
    return {
        data: zufang,
    }
}

@connect(MapZuFangToProps)
class ZuFang extends Component {

    render() {
        console.log(this.props);
        const { data: { visible } } = this.props;
        return (
            <div>
                <Modal
                    title='Basic Modal'
                    visible={visible}
                >
                    <p>Some contents...</p>
                </Modal>
            </div>
        )
    }
}

export default ZuFang;

(5) 第五種獲取dva管理的state數據方法

  • ZuFang.js
import React, { Component } from 'react'
import { Modal } from 'antd'
import { connect } from 'dva';

// 通過解構的方式獲取
const MapZuFangToProps = ({ zufang }) => {
    return {
        data: { ...zufang }
    }
}

@connect(MapZuFangToProps)
class ZuFang extends Component {

    render() {
        console.log(this.props);
        const { data: { visible } } = this.props;
        return (
            <div>
                <Modal
                    title='Basic Modal'
                    visible={visible}
                >
                    <p>Some contents...</p>
                </Modal>
            </div>
        )
    }
}

export default ZuFang;

(6) 第六種獲取dva管理的state數據方法

  • ZuFang.js
import React, { Component } from 'react'
import { Modal } from 'antd'
import { connect } from 'dva';

// 添加loading,獲取zufang.js文件中的state管理的數據,並賦值給data
const MapZuFangToProps = ({ zufang, loading }) => {
    return {
        data: zufang,
        loading
    }
}

@connect(MapZuFangToProps)
class ZuFang extends Component {

    render() {
        console.log(this.props);
        const { data: { visible } } = this.props;
        return (
            <div>
                <Modal
                    title='Basic Modal'
                    visible={visible}
                >
                    <p>Some contents...</p>
                </Modal>
            </div>
        )
    }
}

export default ZuFang;

(7) 第七種獲取dva管理的state數據方法

  • ZuFang.js
import React, { Component } from 'react'
import { Modal } from 'antd'
import { connect } from 'dva';

// 解構方式
const MapZuFangToProps = ({ zufang, loading }) => {
    return {
        ...zufang,
        loading
    }
}

@connect(MapZuFangToProps)
class ZuFang extends Component {

    render() {
        console.log(this.props);
        const { data: { visible } } = this.props;
        return (
            <div>
                <Modal
                    title='Basic Modal'
                    visible={visible}
                >
                    <p>Some contents...</p>
                </Modal>
            </div>
        )
    }
}

export default ZuFang;

(8) 第八種獲取dva管理的state數據方法

  • ZuFang.js
import React, { Component } from 'react'
import { Modal } from 'antd'
import { connect } from 'dva';

const MapZuFangToProps = (state) => {
    const { loading } = state;
    return {
        data: state['zufang'],
        loading,
    }
}

@connect(MapZuFangToProps)
class ZuFang extends Component {

    render() {
        console.log(this.props);
        const { data } = this.props;
        return (
            <div>
                <Modal
                    title='Basic Modal'
                    visible={data.visible}
                >
                    <p>Some contents...</p>
                </Modal>
            </div>
        )
    }
}

export default ZuFang;

(9) 第九種獲取dva管理的state數據方法(推薦使用)

  • ZuFang.js
import React, { Component } from 'react'
import { Modal } from 'antd'
import { connect } from 'dva';

const MapZuFangToProps = ({zufang, loading}) => {
    return {
        zufang,
        loading,
    }
}

@connect(MapZuFangToProps)
class ZuFang extends Component {

    render() {
        console.log(this.props);
        const { visible} = this.props.zufang;
        return (
            <div>
                <Modal
                    title='Basic Modal'
                    visible={visible}
                >
                    <p>Some contents...</p>
                </Modal>
            </div>
        )
    }
}

export default ZuFang;

三、一個react組件關聯多個dva對象

(1) 第一種關聯方法

  • ZuFang.js
import React, { Component } from 'react'
import { Modal } from 'antd'
import { connect } from 'dva';

const MapZuFangToProps = ({ zufang, loading }) => {
    return {
        ...zufang,
        loading,
    }
}

const MapUsersToProps = ({ users }) => {
    return {
        ...users,
    }
}

@connect(MapZuFangToProps)
@connect(MapUsersToProps)
class ZuFang extends Component {

    render() {
        console.log(this.props);
        // const { data } = this.props;
        return (
            <div>
                <Modal
                    title='Basic Modal'
                    visible={true}
                >
                    <p>Some contents...</p>
                </Modal>
            </div>
        )
    }
}

export default ZuFang;

(2) 第二種關聯方法

  • ZuFang.js
import React, { Component } from 'react'
import { Modal } from 'antd'
import { connect } from 'dva';

// 不採用解構方式,不同dva對象中的數據可以存在名字相同的變量,避免重複
const MapZuFangToProps = ({ zufang, loading }) => {
    return {
        zufang,
        loading,
    }
}

// loading爲全局變量,只需加載一次
const MapUsersToProps = ({ users }) => {
    return {
        users,
    }
}

@connect(MapZuFangToProps)
@connect(MapUsersToProps)
class ZuFang extends Component {

    render() {
        console.log(this.props);
        // const { data } = this.props;
        return (
            <div>
                <Modal
                    title='Basic Modal'
                    visible={true}
                >
                    <p>Some contents...</p>
                </Modal>
            </div>
        )
    }
}

export default ZuFang;

(2) 第三種關聯方法(推薦使用)

  • ZuFang.js
import React, { Component } from 'react'
import { Modal } from 'antd'
import { connect } from 'dva';

// 不採用解構方式,不同dva對象中的數據可以存在名字相同的變量,避免重複
const MapModelsToProps = ({ zufang, users, loading }) => {
    return {
        zufang,
        users,
        loading,
    }
}

@connect(MapModelsToProps)
class ZuFang extends Component {

    render() {
        console.log(this.props);
        // const { data } = this.props;
        return (
            <div>
                <Modal
                    title='Basic Modal'
                    visible={true}
                >
                    <p>Some contents...</p>
                </Modal>
            </div>
        )
    }
}

export default ZuFang;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章