孤独プログラマー譚

孤独死が近い。

React Redux

Vue.jsのVuexと似てるけど、こんなんだったっけな。

import React from 'react';
import QuxComponent from '../QuxComponent/QuxComponent';
import { createStore } from 'redux';
import { Provider } from 'react-redux';

const BazComponent = () => {
  const initial_state = {
    a: 1,
    b: 2,
    c: 3,
  }

  const reducer = (state = initial_state, action) => {
    switch (action.type) {
      case 'increment':
        return {
          ...state,
          a: state.a + 1,
          b: state.b * 2,
        }
      default:
        return state
    }
  }
  const store = createStore(reducer)

  return (
    <div className="App">
      BazComponent<br/>
      <Provider store={store}>
        <QuxComponent/>
      </Provider>
    </div>
  )
};

export default BazComponent;
import React, { Component } from 'react';
import { connect } from 'react-redux';

class QuxComponent extends Component {
  constructor (props) {
    super(props)
    this.doAction = this.doAction.bind(this)
  }

  doAction () {
    this.props.dispatch({ type: 'increment' })
  }

  render () {
    return (
      <div className="App">
        QuxComponent Component
        <div>{this.props.a}</div>
        <div>{this.props.b}</div>
        <div>{this.props.c}</div>
        <button onClick={this.doAction}>increment</button>
      </div>
    )
  }
}

QuxComponent = connect(state => state)(QuxComponent)

export default QuxComponent;