1

So I'm trying to load a Redux Form pre populated with values from my store. However I'm unable to get anything back other than null. Been at this for several hours now and been reading over several SO examples trying different things and think I'm just at a wall on this.

Following this Redux Form Initializing from State example

  • Redux: 3.6.0
  • React-Redux: 5.0.3
  • Redux-Form: 6.6.3
  • React: 15.4.2

There is a parent component that is rendering a child component which is the form. For sake of brevity going to put in the bare minimum of code and make names as generic as possible. Everything loads fine but I think the issue relies in not properly connecting to my store. Or rather I should just be loading the data on a componentWillMount?

Parent Component:

import React, { Component } from 'react';
import { connect } from 'react-redux';
import { fetchUser } from '../actions/usersActions';

import ChildForm from './ChildForm.jsx'

@connect((store) => {
  return{
    user: store.users.user
  }
})

export default class Parent extends Component{
  componentWillMount(){
    this.props.dispatch(fetchUser(this.props.match.params.id))
  }
  submit = (values) => {//do some stuff}

  render(){
    return(
      <ChildForm onSubmit={this.submit} />
    );
  }
}

ChildForm:

import React, { Component } from 'react';
import { connect } from 'react-redux';
import { Field, reduxForm } from 'redux-form';
import { user } from './reducers/usersReducer.js';

class ChildForm extends Component{
  render(){
    console.log('FORM STATE >>>>>>>>>>', this.state); //Returns NULL
    const { handleSubmit } = this.props;
    return(
      <form onSubmit={handleSubmit}>
        <div>
          <label htmlFor="firstName">First Name</label>
          <Field name="first_name" component="input" type="text"/>
        </div>
        <button type="submit">Submit</button>
      </form>
    );
  }    
}

ChildForm = reduxForm({
  form: 'childForm',
  enableReinitialize : true // I found this in another SO Example
})(ChildForm);

ChildForm = connect(
  state => ({
    user: state.user,
    initialValues: state.user
  }),
  { fetchUser }
)(ChildForm)

export default ChildForm;

enableReinitialize SO

usersReducer.js

export default function reducer(state={
  user: {},
}, action){
  switch (action.type){
    case "FETCH_USER_FULFILLED":{
      return{
        ...state,
        user: action.payload
      }
    }
  }
  return state;
}

So this is where I'm at currently. Can get the page, form, and submit all work. However I can't seem to figure out how to get my Store values out and into the form fields. Any help would be greatly appreciated.

wsfuller
  • 1,810
  • 8
  • 31
  • 49

1 Answers1

0

Looks like everything is wired up correctly but I wasn't pulling in the correct object in the store.

ChildForm = connect(
  state => ({
    initialValues: state.users.user
  }),
  { fetchUser }
)(ChildForm)

...Always something little

wsfuller
  • 1,810
  • 8
  • 31
  • 49