ant design pro基本使用


page 下的index文件

import React, { Component } from 'react';
import {connect} from 'dva';
const nameSpace = 'list'
// @connect((state)=>{}) 第一個回調函數將page和model連接起來,返回model中的數據,並且將返回的數據綁定到this.props中
// 通過state[nameSpace]就可以獲取該命名空間下的model中state數據
// 第二個回調函數:將定義的函數綁定在this.props中,調用model層中定義的函數
@connect((state)=>{
  const  listData = state[nameSpace].data
  const  maxNum = state[nameSpace].maxNum
  return {
    listData, // 可以通過this.props.listData來直接使用該數據
    maxNum
  }
},(dispatch)=>{ // dispatch可以調用model層中定義的函數
  return{ // 將返回的函數綁定在this.props中
    add:function () {
        dispatch({ // 在type這里定義調用,固定格式nameSpace/函數名(reducers中定義的),可以調用reducers中的函數
          type: nameSpace + "/addNewNumber"
        })
    },
    init: ()=>{
      dispatch({ // 和調用reducer中的方式類似,可以調用effects中的方法
        type: nameSpace + "/initData"
      })
    }
  }
})
class Index extends Component {
  componentDidMount() {
    this.props.init()
  }

  render() {
    return (
      <div>
        {this.props.maxNum}
        {this.props.listData.map((item,index)=>{
          return (
            <li key={index}>{item}</li>
          )
        })}
        <button onClick={()=>{
          this.props.add()
        }}>點我</button>
      </div>
    );
  }
}

export default Index;

model層的使用   this.props.add() -> dispatch -> addNewNumer() ->數據改變 -> render()重新渲染視圖    使用effects中的方法同理

import request from '../../../../utils/request'
export default {
  namespace: 'list',
  state: {
    data: [],
    maxNum: 0
  },
  reducers:{
    addNewNumber:function (state,result) { // 這個state是更新前的對象  return的是之后新的數據
      if(result.data){
        return result.data
      }
      const newMax = state.maxNum + 1;
      const newArr = [...state.data,newMax]
      return { // 返回的是更新后的對象,更新數據,更新之后,render會重新調用,渲染頁面
        data: newArr,
        maxNum: newMax
      }
    }
  },
  effects:{// 用於異步加載數據
    *initData(params,sagaEffects){ //定義異步方法
      const {call, put} = sagaEffects; // 獲取到call和put方法
      const url = '/api/list'; // 定義請求的url/
      let data = yield call(request,url); // 執行請求

      yield put({ // 調用reducers中的方法
        type: "addNewNumber", //指定方法名,put可以調用reducers中的函數
        data: data // 傳遞ajax傳遞回來的數據 ,會將這個data放在調用方法中的第二個參數當中
      })
    }
  }
}

 mock數據

export default {
  // 支持值為 Object 和 Array
  'GET /api/list': function (req,res) {
    res.json({
      data: [1,2,3,4],
      maxNum: 4
    })
  },
};

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM