Initialize From State Form - rkaku/react-hooks-101 GitHub Wiki

store.js

import { createStore, combineReducers } from 'redux';
import { reducer as reduxFormReducer } from 'redux-form';
import account from './account';

const reducer = combineReducers({
  account,
  form: reduxFormReducer, // mounted under "form"
});
const store = (window.devToolsExtension
  ? window.devToolsExtension()(createStore)
  : createStore)(reducer);

export default store;

account.js

const LOAD = 'redux-form-examples/account/LOAD';

const reducer = (state = {}, action) => {
  switch (action.type) {
    case LOAD:
      return {
        data: action.data,
      };
    default:
      return state;
  }
};

/**
 * Simulates data loaded into this reducer from somewhere
 */
export const loadCreator = data => ({ type: LOAD, data });

export default reducer;

Initialize From State Form

import React from 'react';
import { connect } from 'react-redux';
import { Field, reduxForm } from 'redux-form';
import { loadCreator } from './account';


const data = {
  // used to populate "account" reducer when "Load" is clicked
  firstName: 'Jane',
};
let InitializeFromStateForm = props => {
  const { handleSubmit, load, pristine, reset, submitting } = props;
  return (
    <form onSubmit={handleSubmit}>
      <div>
        <button type="button" onClick={() => load(data)}>Load Account</button>
      </div>
      <div>
        <label>First Name</label>
        <div>
          <Field
            name="firstName"
            component="input"
            type="text"
            placeholder="First Name"
          />
        </div>
      </div>
      <div>
        <button type="submit" disabled={pristine || submitting}>Submit</button>
        <button type="button" disabled={pristine || submitting} onClick={reset}>
          Undo Changes
        </button>
      </div>
    </form>
  );
};
// Decorate with reduxForm(). It will read the initialValues prop provided by connect()

InitializeFromStateForm = reduxForm({

  form: 'initializeFromState', // a unique identifier for this form

})(InitializeFromStateForm);
// You have to connect() to any reducers that you wish to connect to yourself

InitializeFromStateForm = connect(

  state => ({
    initialValues: state.account.data, // pull initial values from account reducer <- useSelector
  }),

  { load: loadCreator }, // bind account loading action creator <- useDispatch

)(InitializeFromStateForm);
⚠️ **GitHub.com Fallback** ⚠️