03-HK租房 集成Redux

简介: 本文是 hkzf 移动端 的系列教程,旨在通过一系列的文章来帮助初学者快速掌握基于React技术栈的项目开发。

03-HK 集成Redux

本文是 hkzf 移动端 的系列教程,旨在通过一系列的文章来帮助初学者快速掌握基于React技术栈的项目开发。

Redux介绍

动机

JavaScript 需要管理比任何时候都要多的 state (状态)Redux 试图让 state 的变化变得可预测

三大原则

单一数据源

State 是只读的

使用纯函数来执行修改

三大概念

Action

Action 是把数据从应用(译者注:这里之所以不叫 view 是因为这些数据有可能是服务器响应,用户输入或其它非 view 的数据 )传到 store 的有效载荷

Reducer

Reducers 指定了应用状态的变化如何响应 actions 并发送到 store 的,记住 actions 只是描述了有事情发生了这一事实,并没有描述应用如何更新 state。

Store

单一的 数据源

HK应用中Redux的应用-共享城市名称

Action Creator src/store/actionCreator/index.js

import { GET_CITY_NAME } from '../actionTypes'
export const getCityNameAction = (cityName) => {
    return {
        type: GET_CITY_NAME,
        value:cityName
    }
}

Action Type src/store/actionTypes/index.js

// 获取城市名称的类型
export const GET_CITY_NAME = "GET_CITY_NAME"

Reducer src/store/reducer/index.js

import mapReducer from './mapReducer'
import { combineReducers } from "redux"
export default combineReducers({mapReducer})

MapReducer src/store/reducer/mapReducer.js

import {GET_CITY_NAME } from '../actionTypes'

const defaultState = {
    cityName:""
}

export default (state = defaultState,action) => {
    const { type,value } = action;
    let newState = JSON.parse(JSON.stringify(state));
    switch(type){
        case GET_CITY_NAME:
            newState.cityName = value;
            return newState;
        default:
            return state;
    }
    
}

单一的 store

import reducer from './reducer'
import { createStore } from 'redux'

export default createStore(reducer)

使用 store 里面的共享变量

//当前定位城市
const { mapReducer } = store.getState();
const cityName = mapReducer.cityName;

分发Action例子 src/App.js

import React,{ Fragment } from "react"
import { HashRouter as Router,Route} from "react-router-dom"
import Home from "./pages/Home"
import List from "./pages/List"
import News from "./pages/News"
import Profile from "./pages/Profile"
import HKLayout from "./components/HKLayout"
import { getCityNameAction } from './store/actionCreator'
import BMap from './pages/BMap'
import CityList from './pages/CityList'

import store from "./store"


 export default class TabBarExample extends React.Component {


      componentDidMount(){
        this.getLocalCity();
      }
      getLocalCity = (params) => {
        let map = new window.BMap.LocalCity();
        map.get((result) => {
          const cityName = "广州" || result.name;
          store.dispatch(getCityNameAction(cityName));
        }
        )

      }
      

      render(){
        return <Fragment>
          <Router>
            <Route path="/" exact render={()=> <HKLayout><Home/></HKLayout>}></Route>
            <Route path="/List" exact render={()=><HKLayout> <List/></HKLayout>}></Route>
            <Route path="/News" exact render={()=><HKLayout><News/></HKLayout>}></Route>
            <Route path="/Profile" exact render={()=><HKLayout><Profile/></HKLayout>}></Route>
            <Route path="/CityList" exact component={CityList}></Route>
            <Route path="/BMap" exact component={BMap}></Route>
          </Router>
        </Fragment>
      }

  }
目录
相关文章
|
8月前
|
JavaScript
2021-07-27大连东软实训第七天---vue编程式路由,VUEX
2021-07-27大连东软实训第七天---vue编程式路由,VUEX
31 0
|
JavaScript 数据可视化 搜索推荐
Django+Vue开发生鲜电商平台之2.开发环境搭建
文章目录 一、PyCharm的安装和简单使用 二、MySQL和Navicat的安装和使用 三、Python的安装 四、虚拟环境的安装和配置 五、Vue开发环境搭建
Django+Vue开发生鲜电商平台之2.开发环境搭建
|
缓存 监控 JavaScript
Django+Vue开发生鲜电商平台之1.项目介绍
文章目录 一、项目概览 二、项目技术要点 三、项目预览
Django+Vue开发生鲜电商平台之1.项目介绍
|
开发工具 git
【Vue3.0移动端项目--旅游网】-- 房屋信息和房屋设施
【Vue3.0移动端项目--旅游网】-- 房屋信息和房屋设施
【Vue3.0移动端项目--旅游网】-- 房屋信息和房屋设施
|
开发者 前端开发
「前端组件化」以Antd为例,快速打通UI组件开发的任督二脉
UI组件开发是前端工作的重要一环,唠一唠到底Antd的技术大神们,是怎么实现我们在官网看到的这些组件的。
317 1
|
JavaScript 前端开发 算法
测试圈相亲平台开发流程 (2): vue和django 初始化,打通联调。
测试圈相亲平台开发流程 (2): vue和django 初始化,打通联调。
测试圈相亲平台开发流程 (2): vue和django 初始化,打通联调。
好客租房104-组件库antd-mobile
好客租房104-组件库antd-mobile
73 0
好客租房104-组件库antd-mobile
好客租房141-react-virtualized1概述
好客租房141-react-virtualized1概述
74 0
好客租房141-react-virtualized1概述
|
前端开发 JavaScript vr&ar
好客租房2-React概述
好客租房2-React概述
211 0
好客租房99-react路由基础总结
好客租房99-react路由基础总结
90 0
好客租房99-react路由基础总结