tiye / react-native-without-jsx-redux

An React Native Demo without JSX and Redux

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

An React Native Demo without JSX and Redux

Run with react-native run-ios.

emitter.js:

import EventEmitter from 'EventEmitter';
import Immutable from 'immutable';

let globalEmitter = new EventEmitter();

let register = fn => globalEmitter.addListener('bus', fn);

let unregisterAll = () => globalEmitter.removeAllListeners('bus');

let dispatch = (action, data) => globalEmitter.emit('bus', Immutable.fromJS([action, data]));

export { register };
export { unregisterAll };
export { dispatch };

container.js:

import React from 'react';
import hsl from 'hsl';
import { View, Text, TouchableHighlight, StyleSheet } from 'react-native';
import { register, dispatch, unregisterAll } from './emitter';
import { store } from './schema';
import { updater } from './updater/index';

let $ = React.createElement;

class Container extends React.Component {
  constructor(props) {
    super(props);
    this.state =
      {store};
  }

  componentDidMount() {
    return register(pair => {
      let [action, data] = pair;
      return this.setState({store: updater(this.state.store, action, data, null, null)});
    });
  }

  componentWillUnmount() {
    return unregisterAll();
  }

  onPress() {
    return dispatch('add', null);
  }

  render() {
    return $(View, {style: style.container},
      $(Text, {}, (JSON.stringify(this.state.store))),
      $(TouchableHighlight, {style: style.button, onPress: this.onPress.bind(this)},
        $(Text, {}, 'Add')));
  }
}

var style = StyleSheet.create({
  container: {
    paddingTop: 20
  },
  button: {
    backgroundColor: hsl(0,0,80),
    width: 100
  }
});

export default Container;

index.ios.js:

import React, { Component } from 'react';
import { AppRegistry } from 'react-native';

import Container from './app/container';

AppRegistry.registerComponent('Coffee', () => Container);

About

An React Native Demo without JSX and Redux


Languages

Language:Objective-C 39.5%Language:JavaScript 27.4%Language:CoffeeScript 12.9%Language:Python 12.4%Language:Java 7.8%