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>
      }

  }
目录
相关文章
|
6月前
|
小程序 Android开发 数据安全/隐私保护
【 uniapp - 黑马优购 | 发布】详讲如何发布一个小程序
【 uniapp - 黑马优购 | 发布】详讲如何发布一个小程序
70 0
|
10月前
|
小程序 安全 JavaScript
ssm+vue基本微信小程序的蛋糕预订平台系统
在当今社会的高速发展过程中,产生的劳动力越来越大,提高人们的生活水平和质量,尤其计算机科技的进步,数据和信息以人兴化为本的目的,给人们提供优质的服务,其中网上预订蛋糕尤其突出,使我们的预订方式发生巨大的改变。而线上预订,不仅需要在硬件上为人们提供服务网上预订,而且还可以省去许多时间去实体店选择蛋糕,既可以吸引用户流量好,还可以预订蛋糕,更要在软件上为需要服务的人提供必要的便利。于是蛋糕预订平台小程序便应运而生。
|
10月前
|
小程序 数据可视化 安全
springboot+vue基本微信小程序的小区防疫监管系统
功能介绍 该小程序分为6个模块,重在监测小区疫情居民的身体健康状况,要求居民每日健康打卡,在管理基本人员信息外增设了物资选购平台满足封闭期间居民的日常生活物资的补给,实现足不出户也能过好基本的生活,配合小区的管理,做好个人防护。
|
JavaScript 数据可视化 搜索推荐
Django+Vue开发生鲜电商平台之2.开发环境搭建
文章目录 一、PyCharm的安装和简单使用 二、MySQL和Navicat的安装和使用 三、Python的安装 四、虚拟环境的安装和配置 五、Vue开发环境搭建
Django+Vue开发生鲜电商平台之2.开发环境搭建
|
缓存 监控 JavaScript
Django+Vue开发生鲜电商平台之1.项目介绍
文章目录 一、项目概览 二、项目技术要点 三、项目预览
Django+Vue开发生鲜电商平台之1.项目介绍
|
前端开发 JavaScript 数据库
Django+Vue开发生鲜电商平台之7.用户登录和注册功能(中)
基于DRF的前后端分离登录与单独使用Django登录的原理不同,不再需要CSRF验证,DRF提供了许多开箱即用的身份验证方案,并且还允许实现自定义方案。
Django+Vue开发生鲜电商平台之7.用户登录和注册功能(中)
|
存储 JSON 算法
Django+Vue开发生鲜电商平台之7.用户登录和注册功能(上)
基于DRF的前后端分离登录与单独使用Django登录的原理不同,不再需要CSRF验证,DRF提供了许多开箱即用的身份验证方案,并且还允许实现自定义方案。
Django+Vue开发生鲜电商平台之7.用户登录和注册功能(上)
|
前端开发 JavaScript 数据库
Django+Vue开发生鲜电商平台之7.用户登录和注册功能(下)
基于DRF的前后端分离登录与单独使用Django登录的原理不同,不再需要CSRF验证,DRF提供了许多开箱即用的身份验证方案,并且还允许实现自定义方案。
Django+Vue开发生鲜电商平台之7.用户登录和注册功能(下)
|
开发工具 git
【Vue3.0移动端项目--旅游网】-- 房屋信息和房屋设施
【Vue3.0移动端项目--旅游网】-- 房屋信息和房屋设施
【Vue3.0移动端项目--旅游网】-- 房屋信息和房屋设施
好客租房104-组件库antd-mobile
好客租房104-组件库antd-mobile
73 0
好客租房104-组件库antd-mobile

热门文章

最新文章