【水滴石穿】rn_antd_dva_reactnavigation
这个项目好像就是记录了一个数据的流向,大体思想好像是这个
项目地址:https://github.com/Yangzhuren/rn_antd_dva_reactnavigation
先看效果
第一个页面会显示第二个页面点击的值

第二个页面

先来看代码
根index.js引用的不是app.js组件而是在自定义的组件里面
//index.js
/**
 * @format
 */
import {AppRegistry} from 'react-native';
import App from './js';
import {name as appName} from './app.json';
AppRegistry.registerComponent(appName, () => App);
js中的项目

//js/index.js
import React, {Component} from 'react'
import {InputItem, List, Provider} from "@ant-design/react-native";
import Pages from './pages'
import dva from "dva";
import {registerModels} from "./models";
import createMemoryHistory from "history/createMemoryHistory";
class Root extends Component {
    constructor(props) {
        super(props);
    }
    render() {
        return (
            <Provider>
                <Pages/>
            </Provider>
        )
    }
}
const app = dva({
    history:createMemoryHistory(),
    initialState: {},
    onError: function (e) {
        console.log("dva onError", e)
    }
})
registerModels(app)
app.router(() => <Root/>)
const App = app.start()
export default App
上面的引用了pages组件
页面一进去,应该进入的是page1页面然后再进去page2页面
看代码
//js/pages/index.js
//根据代码执行顺序可知道先执行page1
import React, {Component} from 'react'
import {createStackNavigator, createAppContainer} from 'react-navigation'
import Page1 from "./page1";
import Page2 from "./page2";
const Pages = createStackNavigator({
    page1: {
        screen: Page1
    },
    page2: {
        screen: Page2
    }
})
export default createAppContainer(Pages)
page1页面组件


//js/pages/page1/index.js
import React, {Component} from 'react'
import {Button, Flex} from "@ant-design/react-native"
import Actions from './actions'
import {connect} from 'dva'
class Page1 extends Component {
    constructor(props) {
        super(props)
        new Actions(this)
    }
    render() {
        const {clickCount} = this.props.userInfo
        return (
            <Flex align={"center"} justify={"center"} style={{flex: 1}}>
                <Button onPress={this.clicked}>go page2 and click count:{clickCount}</Button>
            </Flex>
        )
    }
}
function mapStateToProps(state) {
    return {userInfo: state.user}
}
export default connect(mapStateToProps)(Page1)
这个有意思,定一个action组件,然后点击可以跳转第二个页面
//js/pages/page1/actions.js
import {BaseAction} from '../../common'
export default class Actions extends BaseAction {
    clicked() {
        this.props.navigation.navigate('page2')
    }
}
//js/pages/page2/index.js
import React, {Component} from 'react'
import {Button} from "@ant-design/react-native"
import Actions from './actions'
import {createAction} from "../../actions";
import {connect} from 'dva';
class Page2 extends Component {
    constructor(props) {
        super(props)
        new Actions(this)
        this.state = {
            clickCount: 0
        }
    }
    render() {
        const {clickCount} = this.state
        return (
            <Button onPress={this.clicked}>page2 click counts:{clickCount}</Button>
        )
    }
}
function mapStateToProps(state) {
    return {userInfo: state.user}
}
export default connect(mapStateToProps)(Page2)
//js/pages/page2/actions.js
import {BaseAction} from '../../common'
import {createAction} from "../../actions";
export default class Actions extends BaseAction {
    clicked() {
        const {clickCount} = this.state
        this.setState({
            clickCount: clickCount + 1
        },()=>{
            const userAction = createAction('user/checkUser')({clickCount: this.state.clickCount})
            this.props.dispatch(userAction)
        })
    }
}
关于models里面有一点不理解
//js/models/index.js
import User from './User'
import {DvaInstance} from "dva";
export function registerModels(app: DvaInstance) {
    app.model(User)
}
//js/models/User.js
// 里面就是dva的一些基本方法吗
import {createAction} from '../actions'
export default {
    namespace: 'user',
    state: {
        name: '',
        mobile: '',
        clickCount: 0
    },
    reducers: {
        getUserInfo(state, {payload}) {
            return {...state, ...payload}
        }
    },
    effects: {
        * checkUser({payload}, {call, put}) {
            yield put(
                createAction('getUserInfo')({
                    ...payload
                })
            )
        }
    }
}
												
											【水滴石穿】rn_antd_dva_reactnavigation的更多相关文章
- iOS 开发笔记 -- 各种细枝末节的知识(水滴石穿)
		
在此总结整理,遇到的各种的小问题: 1.通过从字典(数组)中取出的NSString的length==0 作为if的判断条件导致的carsh: 由于在字典中通过Key取出值之后直接做了length相关操 ...
 - 【水滴石穿】react-native-book
		
先推荐一个学习的地址:https://ke.qq.com/webcourse/index.html#cid=203313&term_id=100240778&taid=12778558 ...
 - 【水滴石穿】rnTest
		
其实就是一个小的demo,不过代码分的挺精巧的 先放地址:https://github.com/linchengzzz/rnTest 来看看效果 确实没有什么可以说的,不过代码部分还行 先入口文件 / ...
 - 【水滴石穿】rn_statusbar
		
先放项目地址https://github.com/hezhii/rn_statusbar 来看一下效果 咩有感觉很怎么样,看代码 根入口文件 //index.js //看代码我们知道入口是app.js ...
 - 【水滴石穿】react-native-ble-demo
		
项目的话,是想打开蓝牙,然后连接设备 点击已经连接的设备,我们会看到一些设备 不过我这边在开启蓝牙的时候报错了 先放作者的项目地址: https://github.com/hezhii/react-n ...
 - 【水滴石穿】ReactNative-Redux-Thunk
		
老实说,运行出来的项目让人失望,毕竟我想看各种有趣的demo啊- 先放上源码地址:https://github.com/ludejun/ReactNative-Redux-Thunk 我们来一起看看代 ...
 - 【水滴石穿】mobx-todos
		
我觉得代码在有些程序员手里,就好像是画笔,可以创造很多东西 不要觉得创意少就叫没有创意,每天进步一点点,世界更美好 首先源码地址为:https://github.com/byk04712/mobx-t ...
 - 【水滴石穿】ReactNativeMobxFrame
		
项目地址如下:https://github.com/FTD-ZF/ReactNativeMobxFrame 应该可以说的是,项目也只是一个花架子,不过底部的tab稍微改变了 我们一起来看代码 //in ...
 - 【水滴石穿】react-native-aze
		
说个题外话,早上打开电脑的时候,电脑变成彩色的了,锅是我曾经安装的一个chrome扩展,没有经过我的同意开启了 (也许是昨天迷迷糊糊开启了) 上午运行项目都不成功,还以为被黑客攻击了---然后下午就排 ...
 
随机推荐
- Link-Cut Tree(LCT)
			
转载自LCT(Link-Cut Tree)详解(蒟蒻自留地) 如果你还没有接触过LCT,你可以先看一看这里: (看不懂没关系,先留个大概的印像)http://www.cnblogs.com/BLADE ...
 - 05.Hibernate常用的接口和类---Configuration类和作用
			
Configuration作用: 加载Hibernate配置文件,可以获取SessionFactory对象 加载方式: 1.加载配置文件 Configuration configuration = n ...
 - 全面解决Html页面缓存的问题
			
页面缓存的问题可能大家都遇到过,很多功能做完没起效果,那么怎么解决这个问题呢?这里给出我的使用的解决方法 对于一个html页面,缓存分3部分,一个是页面内容,一个是css样式,一个是JS文件1.页面内 ...
 - [转]Visual Studio 2010单元测试(3)--顺序单元测试
			
之前我们做的测试都是一个一个进行的,当然我们也可以一次性选择多个测试方法进行,但是测试运行的顺序以“测试列表编辑器”窗口中的默认列表顺序为准.在实际场景中,我们需要进行有顺序的单元测试,步骤可能每一步 ...
 - webpack:Cannot find module 'extract-text-webpack-plugin'
			
问题: 在终端中使用此命令安装了extract-text-webpack-plugin,npm install -g extract-text-webpack-plugin并在webpack.conf ...
 - c++继承知识点小结
			
继承的概念 继承是c++中一个重要的概念.继承是指,我们可以使用一个类来定义另一个类,在创建这个类时,我们就不需要重新编写数据成员与成员函数,这可以大大方便我们编写代码和维护代码的效率. 当我们使用一 ...
 - vue.js_04_vue.js的for循环,if判断和show显示
			
1.for循环 <body> <div id="app"> <p>{{list1[0]}}</p> <hr /> < ...
 - python基础---递归函数真题解析
			
方法一.有如下值集合 [11,22,33,44,55,66,77,88,99,90...],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中. 即: {'k ...
 - 深入浅出 Java Concurrency (15): 锁机制 part 10 锁的一些其它问题[转]
			
主要谈谈锁的性能以及其它一些理论知识,内容主要的出处是<Java Concurrency in Practice>,结合自己的理解和实际应用对锁机制进行一个小小的总结. 首先需要强调的一点 ...
 - Delphi 设计模式:《HeadFirst设计模式》Delphi代码---工厂模式之抽象工厂[转]
			
1 2 {<HeadFirst设计模式>工厂模式之抽象工厂 } 3 { 抽象工厂的产品 } 4 { 编译工具:Delphi7.0 ...