这个项目好像就是记录了一个数据的流向,大体思想好像是这个

项目地址: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的更多相关文章

  1. iOS 开发笔记 -- 各种细枝末节的知识(水滴石穿)

    在此总结整理,遇到的各种的小问题: 1.通过从字典(数组)中取出的NSString的length==0 作为if的判断条件导致的carsh: 由于在字典中通过Key取出值之后直接做了length相关操 ...

  2. 【水滴石穿】react-native-book

    先推荐一个学习的地址:https://ke.qq.com/webcourse/index.html#cid=203313&term_id=100240778&taid=12778558 ...

  3. 【水滴石穿】rnTest

    其实就是一个小的demo,不过代码分的挺精巧的 先放地址:https://github.com/linchengzzz/rnTest 来看看效果 确实没有什么可以说的,不过代码部分还行 先入口文件 / ...

  4. 【水滴石穿】rn_statusbar

    先放项目地址https://github.com/hezhii/rn_statusbar 来看一下效果 咩有感觉很怎么样,看代码 根入口文件 //index.js //看代码我们知道入口是app.js ...

  5. 【水滴石穿】react-native-ble-demo

    项目的话,是想打开蓝牙,然后连接设备 点击已经连接的设备,我们会看到一些设备 不过我这边在开启蓝牙的时候报错了 先放作者的项目地址: https://github.com/hezhii/react-n ...

  6. 【水滴石穿】ReactNative-Redux-Thunk

    老实说,运行出来的项目让人失望,毕竟我想看各种有趣的demo啊- 先放上源码地址:https://github.com/ludejun/ReactNative-Redux-Thunk 我们来一起看看代 ...

  7. 【水滴石穿】mobx-todos

    我觉得代码在有些程序员手里,就好像是画笔,可以创造很多东西 不要觉得创意少就叫没有创意,每天进步一点点,世界更美好 首先源码地址为:https://github.com/byk04712/mobx-t ...

  8. 【水滴石穿】ReactNativeMobxFrame

    项目地址如下:https://github.com/FTD-ZF/ReactNativeMobxFrame 应该可以说的是,项目也只是一个花架子,不过底部的tab稍微改变了 我们一起来看代码 //in ...

  9. 【水滴石穿】react-native-aze

    说个题外话,早上打开电脑的时候,电脑变成彩色的了,锅是我曾经安装的一个chrome扩展,没有经过我的同意开启了 (也许是昨天迷迷糊糊开启了) 上午运行项目都不成功,还以为被黑客攻击了---然后下午就排 ...

随机推荐

  1. 网络结构解读之inception系列二:GoogLeNet(Inception V1)

    网络结构解读之inception系列二:GoogLeNet(Inception V1) inception系列的开山之作,有网络结构设计的初期思考. Going deeper with convolu ...

  2. 从github下载项目出现yes/no的选项,无法下载项目

    解决办法: # 本地执行: ssh-keygen # 将id_rsa_pub文件中公钥拷贝到github上的ssh认证 oodful@:~/Volumes/Term2 :::$cat ~/.ssh/i ...

  3. NMS 和 Soft-NMS

    转自https://zhuanlan.zhihu.com/p/42018282 一 NMS NMS算法的大致思想:对于有重叠的候选框:若大于规定阈值(某一提前设定的置信度)则删除,低于阈值的保留.对于 ...

  4. 利用PHP获取访客IP、地区位置、浏览器及来源页面等信息

    这篇文章主要介绍了利用PHP获取访客IP.地区位置.浏览器及来源页面等信息的相关资料,文中给出了详细的示例代码供大家参考学习,对大家具有一定的参考借鉴价值,需要的朋友们下面来一起看看吧. 前言 本文中 ...

  5. Java中"str1.equals(str2)"和"str1==str2"的区别

    大家好,这是我的第一篇博客,作为即将入职的学生,我现在的心情是既好奇又兴奋,对未知的职场生活充满了无限的憧憬,也想赶紧对大学生活say goodbye,因为自己的能力现在还比较有限,我想通过博客这个平 ...

  6. [转载] OpenCV2.4.3 CheatSheet学习(一)

    OpenCV向MATLAB靠拢,图像的操作方法变得不那么C了,更m了一些.比如,MATLAB中的常用函数imshow.imread.imwrite函数在OpenCV中已经有了同名的兄弟. 此外,Ope ...

  7. DOM4J -(XML解析包)

    DOM4J - 简介 是dom4j.org出品的一个开源XML解析包.Dom4j是一个易用的.开源的库,用于XML,XPath和XSLT.它应用于Java平台,采用了Java集合框架并完全支持DOM, ...

  8. 卸载VS2015之后,安装VS2017出错

    安装出现问题. 可通过以下方式排查包故障问题: 1. 使用以下搜索 URL 来搜索针对每个包故障的解决方案 2. 针对受与影响的工作负荷或组件修改选项,然后重新尝试安装 3. 从计算机上删除产品,然后 ...

  9. Python中函数的定义必须在调用的前面

    # -*- coding:utf-8 -*- Python中函数的定义必须在调用的前面,但是在函数的内部调用一个函数,不用考虑顺序,只要被调用的函数被定义了即可 #标准的先函数定义,后函数调用def ...

  10. mockito问题集

    使用PowerMockRunner.class,不能在测试类中使用IntStream.rang()