项目作者: ntamvl

项目描述 :
React Native Counter Example use create-react-native-app
高级语言: JavaScript
项目地址: git://github.com/ntamvl/react_native_counter_example.git
创建时间: 2017-06-13T03:40:44Z
项目社区:https://github.com/ntamvl/react_native_counter_example

开源协议:MIT License

下载


React Native Counter Example

Use create-react-native-app and redux

Install create-react-native-app

Following https://facebook.github.io/react-native/docs/getting-started.html

Use npm to install the create-react-native-app command line utility:

  1. npm install -g create-react-native-app

Create App

  1. cd && mkdir react_native_counter_example && cd react_native_counter_example && create-react-native-app .

Create folders

  1. mkdir -p src/{components,containers,store}

Add package react-redux, redux

  1. yarn add redux react-redux

Create Counter component

Create file src/components/Counter.js

  1. import React, { Component } from 'react';
  2. import {
  3. Button,
  4. StyleSheet,
  5. Text,
  6. View,
  7. } from 'react-native';
  8. const propTypes = {};
  9. const defaultProps = {};
  10. export default class Counter extends Component {
  11. constructor(props) {
  12. super(props);
  13. this.state = {};
  14. }
  15. render() {
  16. return (
  17. <View>
  18. <Button
  19. title="Up"
  20. onPress={this.props.increment}></Button>
  21. <Text
  22. style={styles.counter}
  23. onPress={this.props.reset}>
  24. {this.props.count}
  25. </Text>
  26. <Button
  27. title="Down"
  28. onPress={this.props.decrement}></Button>
  29. </View>
  30. );
  31. }
  32. }
  33. const styles = StyleSheet.create({
  34. counter: {
  35. padding: 30,
  36. alignSelf: 'center',
  37. fontSize: 26,
  38. fontWeight: 'bold',
  39. },
  40. });

Create store

Create file src/store/store.js

  1. import { createStore } from 'redux'
  2. export const counter = (state = 0, action) => {
  3. switch (action.type) {
  4. case 'INCREMENT':
  5. return state + 1;
  6. case 'DECREMENT':
  7. return state - 1;
  8. case 'RESET':
  9. return 0;
  10. default:
  11. return state;
  12. }
  13. }
  14. let store = createStore(counter);
  15. export default store;

Create Counter container

Create file src/containers/CounterContainer.js

  1. import React, { Component } from 'react';
  2. import { bindActionCreators } from 'redux';
  3. import { connect } from 'react-redux';
  4. import Counter from '../components/Counter';
  5. const mapStateToProps = state => ({
  6. count: state
  7. })
  8. const mapDispatchToProps = (dispatch) => ({
  9. increment: () => { dispatch({ type: 'INCREMENT' }) },
  10. decrement: () => { dispatch({ type: 'DECREMENT' }) },
  11. reset: () => { dispatch({ type: 'RESET' }) }
  12. })
  13. export default connect(mapStateToProps, mapDispatchToProps)(Counter)

Edit file App.js

  1. import React from 'react';
  2. import { StyleSheet, Text, View } from 'react-native';
  3. import { Provider } from 'react-redux';
  4. import store from './src/store/store';
  5. import CounterContainer from './src/containers/CounterContainer';
  6. export default class App extends React.Component {
  7. render() {
  8. return (
  9. <Provider store={store}>
  10. <View style={styles.container}>
  11. <Text style={styles.title}>Counter</Text>
  12. <CounterContainer ></CounterContainer>
  13. </View>
  14. </Provider>
  15. );
  16. }
  17. }
  18. const styles = StyleSheet.create({
  19. container: {
  20. flex: 1,
  21. backgroundColor: '#fff',
  22. alignItems: 'center',
  23. justifyContent: 'center',
  24. },
  25. title: {
  26. fontSize: 30
  27. }
  28. });

To run App

  1. yarn start

OR

  1. yarn run ios

NOTE: If you see errors:

  1. Duplicate module name: fb-watchman

To Resolve, run this command:

  1. yarn cache clean