Implementing Redux in React using the create-react-app -Simple question





.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ height:90px;width:728px;box-sizing:border-box;
}







0















Is is correct to pass a reducer as props when i'm using a rootreducer ?



This is my rootReducer.js :



import { combineReducers } from 'redux';
import simpleReducer from './simpleReducer';
import messageReducer from './messageReducer';
import NewReducer from './NewReducer';
export default combineReducers({
simpleReducer,messageReducer,NewReducer

});


And this is one of my action creators addMessage.js



export const addMessage = (message) => dispatch => {
dispatch({
type: 'ADD',
message: message
})
}


Here is the first reducer messageReducer.js






export default (state = , action) => {
switch (action.type) {
case 'ADD':
return [
...state,
action.message
];
default:
return state;
}
};





And here is another one simpleReducer.js






export default (state = {}, action) => {
switch (action.type) {
case 'SIMPLE_ACTION':
return {
result: action.payload
}
default:
return state
}
}




And finally here is my last reducer NewReducer.js




export default (state = '', action) => {
switch (action.type) {
case 'AnyThing':
return action.WhatToDisplay;
default:
return state;
}
};





Here is my mapping in the App.js



const mapStateToProps = state => ({
...state
})
const mapDispatchToProps = dispatch => ({

simpleAction: () => dispatch(simpleAction()),

submitNewMessage: (message) => {
dispatch(addMessage(message))
},
NewAction: () => dispatch(NewAction())
})


And here is my ِApp Component.Notice my last 2 h2 tags as well as my ul tag .Without me adding the reducer at the end of the prop , it doesn't work.So
is what i'm doing right ? or is there another way to show the redux state in
my react ?.Note that i currently have no errors and the code functions well.I
just wana know if what i am doing is right or wrong and if there is a better
syntax to show the redux state in my create react app.



class App extends Component {
constructor(props) {
super(props);
this.state = {
input: ''

}
this.handleChange = this.handleChange.bind(this);
this.submitMessage = this.submitMessage.bind(this);
}
handleChange(event) {
this.setState({
input: event.target.value
});
}
submitMessage() {
this.props.submitNewMessage(this.state.input);
this.setState({
input: ''
});
}
simpleAction = (event) => {
this.props.simpleAction();
}
localNormalFunction=(event)=>{
this.props.NewAction()
}
render() {
return (
<div >
<h1>fjasgdasdsg</h1>
<button onClick={this.simpleAction}>Test redux action</button>
<pre>
{
JSON.stringify(this.props)
}
</pre>
<h2>Type in a new Message:</h2>
<input
value={this.state.input}
onChange={this.handleChange}/><br/>
<button onClick={this.submitMessage}>Submit</button>
<ul>
{this.props.messageReducer.map( (message,idx) => {
return (
<li key={idx}>{message}</li>
)
})
}
</ul><br/><br/>
<button onClick={this.localNormalFunction}>dsadsdsa</button>
<h2>{this.props.NewReducer}</h2>
<h2>{this.props.simpleReducer.result}</h2>

</div>
);
}
}









share|improve this question































    0















    Is is correct to pass a reducer as props when i'm using a rootreducer ?



    This is my rootReducer.js :



    import { combineReducers } from 'redux';
    import simpleReducer from './simpleReducer';
    import messageReducer from './messageReducer';
    import NewReducer from './NewReducer';
    export default combineReducers({
    simpleReducer,messageReducer,NewReducer

    });


    And this is one of my action creators addMessage.js



    export const addMessage = (message) => dispatch => {
    dispatch({
    type: 'ADD',
    message: message
    })
    }


    Here is the first reducer messageReducer.js






    export default (state = , action) => {
    switch (action.type) {
    case 'ADD':
    return [
    ...state,
    action.message
    ];
    default:
    return state;
    }
    };





    And here is another one simpleReducer.js






    export default (state = {}, action) => {
    switch (action.type) {
    case 'SIMPLE_ACTION':
    return {
    result: action.payload
    }
    default:
    return state
    }
    }




    And finally here is my last reducer NewReducer.js




    export default (state = '', action) => {
    switch (action.type) {
    case 'AnyThing':
    return action.WhatToDisplay;
    default:
    return state;
    }
    };





    Here is my mapping in the App.js



    const mapStateToProps = state => ({
    ...state
    })
    const mapDispatchToProps = dispatch => ({

    simpleAction: () => dispatch(simpleAction()),

    submitNewMessage: (message) => {
    dispatch(addMessage(message))
    },
    NewAction: () => dispatch(NewAction())
    })


    And here is my ِApp Component.Notice my last 2 h2 tags as well as my ul tag .Without me adding the reducer at the end of the prop , it doesn't work.So
    is what i'm doing right ? or is there another way to show the redux state in
    my react ?.Note that i currently have no errors and the code functions well.I
    just wana know if what i am doing is right or wrong and if there is a better
    syntax to show the redux state in my create react app.



    class App extends Component {
    constructor(props) {
    super(props);
    this.state = {
    input: ''

    }
    this.handleChange = this.handleChange.bind(this);
    this.submitMessage = this.submitMessage.bind(this);
    }
    handleChange(event) {
    this.setState({
    input: event.target.value
    });
    }
    submitMessage() {
    this.props.submitNewMessage(this.state.input);
    this.setState({
    input: ''
    });
    }
    simpleAction = (event) => {
    this.props.simpleAction();
    }
    localNormalFunction=(event)=>{
    this.props.NewAction()
    }
    render() {
    return (
    <div >
    <h1>fjasgdasdsg</h1>
    <button onClick={this.simpleAction}>Test redux action</button>
    <pre>
    {
    JSON.stringify(this.props)
    }
    </pre>
    <h2>Type in a new Message:</h2>
    <input
    value={this.state.input}
    onChange={this.handleChange}/><br/>
    <button onClick={this.submitMessage}>Submit</button>
    <ul>
    {this.props.messageReducer.map( (message,idx) => {
    return (
    <li key={idx}>{message}</li>
    )
    })
    }
    </ul><br/><br/>
    <button onClick={this.localNormalFunction}>dsadsdsa</button>
    <h2>{this.props.NewReducer}</h2>
    <h2>{this.props.simpleReducer.result}</h2>

    </div>
    );
    }
    }









    share|improve this question



























      0












      0








      0








      Is is correct to pass a reducer as props when i'm using a rootreducer ?



      This is my rootReducer.js :



      import { combineReducers } from 'redux';
      import simpleReducer from './simpleReducer';
      import messageReducer from './messageReducer';
      import NewReducer from './NewReducer';
      export default combineReducers({
      simpleReducer,messageReducer,NewReducer

      });


      And this is one of my action creators addMessage.js



      export const addMessage = (message) => dispatch => {
      dispatch({
      type: 'ADD',
      message: message
      })
      }


      Here is the first reducer messageReducer.js






      export default (state = , action) => {
      switch (action.type) {
      case 'ADD':
      return [
      ...state,
      action.message
      ];
      default:
      return state;
      }
      };





      And here is another one simpleReducer.js






      export default (state = {}, action) => {
      switch (action.type) {
      case 'SIMPLE_ACTION':
      return {
      result: action.payload
      }
      default:
      return state
      }
      }




      And finally here is my last reducer NewReducer.js




      export default (state = '', action) => {
      switch (action.type) {
      case 'AnyThing':
      return action.WhatToDisplay;
      default:
      return state;
      }
      };





      Here is my mapping in the App.js



      const mapStateToProps = state => ({
      ...state
      })
      const mapDispatchToProps = dispatch => ({

      simpleAction: () => dispatch(simpleAction()),

      submitNewMessage: (message) => {
      dispatch(addMessage(message))
      },
      NewAction: () => dispatch(NewAction())
      })


      And here is my ِApp Component.Notice my last 2 h2 tags as well as my ul tag .Without me adding the reducer at the end of the prop , it doesn't work.So
      is what i'm doing right ? or is there another way to show the redux state in
      my react ?.Note that i currently have no errors and the code functions well.I
      just wana know if what i am doing is right or wrong and if there is a better
      syntax to show the redux state in my create react app.



      class App extends Component {
      constructor(props) {
      super(props);
      this.state = {
      input: ''

      }
      this.handleChange = this.handleChange.bind(this);
      this.submitMessage = this.submitMessage.bind(this);
      }
      handleChange(event) {
      this.setState({
      input: event.target.value
      });
      }
      submitMessage() {
      this.props.submitNewMessage(this.state.input);
      this.setState({
      input: ''
      });
      }
      simpleAction = (event) => {
      this.props.simpleAction();
      }
      localNormalFunction=(event)=>{
      this.props.NewAction()
      }
      render() {
      return (
      <div >
      <h1>fjasgdasdsg</h1>
      <button onClick={this.simpleAction}>Test redux action</button>
      <pre>
      {
      JSON.stringify(this.props)
      }
      </pre>
      <h2>Type in a new Message:</h2>
      <input
      value={this.state.input}
      onChange={this.handleChange}/><br/>
      <button onClick={this.submitMessage}>Submit</button>
      <ul>
      {this.props.messageReducer.map( (message,idx) => {
      return (
      <li key={idx}>{message}</li>
      )
      })
      }
      </ul><br/><br/>
      <button onClick={this.localNormalFunction}>dsadsdsa</button>
      <h2>{this.props.NewReducer}</h2>
      <h2>{this.props.simpleReducer.result}</h2>

      </div>
      );
      }
      }









      share|improve this question
















      Is is correct to pass a reducer as props when i'm using a rootreducer ?



      This is my rootReducer.js :



      import { combineReducers } from 'redux';
      import simpleReducer from './simpleReducer';
      import messageReducer from './messageReducer';
      import NewReducer from './NewReducer';
      export default combineReducers({
      simpleReducer,messageReducer,NewReducer

      });


      And this is one of my action creators addMessage.js



      export const addMessage = (message) => dispatch => {
      dispatch({
      type: 'ADD',
      message: message
      })
      }


      Here is the first reducer messageReducer.js






      export default (state = , action) => {
      switch (action.type) {
      case 'ADD':
      return [
      ...state,
      action.message
      ];
      default:
      return state;
      }
      };





      And here is another one simpleReducer.js






      export default (state = {}, action) => {
      switch (action.type) {
      case 'SIMPLE_ACTION':
      return {
      result: action.payload
      }
      default:
      return state
      }
      }




      And finally here is my last reducer NewReducer.js




      export default (state = '', action) => {
      switch (action.type) {
      case 'AnyThing':
      return action.WhatToDisplay;
      default:
      return state;
      }
      };





      Here is my mapping in the App.js



      const mapStateToProps = state => ({
      ...state
      })
      const mapDispatchToProps = dispatch => ({

      simpleAction: () => dispatch(simpleAction()),

      submitNewMessage: (message) => {
      dispatch(addMessage(message))
      },
      NewAction: () => dispatch(NewAction())
      })


      And here is my ِApp Component.Notice my last 2 h2 tags as well as my ul tag .Without me adding the reducer at the end of the prop , it doesn't work.So
      is what i'm doing right ? or is there another way to show the redux state in
      my react ?.Note that i currently have no errors and the code functions well.I
      just wana know if what i am doing is right or wrong and if there is a better
      syntax to show the redux state in my create react app.



      class App extends Component {
      constructor(props) {
      super(props);
      this.state = {
      input: ''

      }
      this.handleChange = this.handleChange.bind(this);
      this.submitMessage = this.submitMessage.bind(this);
      }
      handleChange(event) {
      this.setState({
      input: event.target.value
      });
      }
      submitMessage() {
      this.props.submitNewMessage(this.state.input);
      this.setState({
      input: ''
      });
      }
      simpleAction = (event) => {
      this.props.simpleAction();
      }
      localNormalFunction=(event)=>{
      this.props.NewAction()
      }
      render() {
      return (
      <div >
      <h1>fjasgdasdsg</h1>
      <button onClick={this.simpleAction}>Test redux action</button>
      <pre>
      {
      JSON.stringify(this.props)
      }
      </pre>
      <h2>Type in a new Message:</h2>
      <input
      value={this.state.input}
      onChange={this.handleChange}/><br/>
      <button onClick={this.submitMessage}>Submit</button>
      <ul>
      {this.props.messageReducer.map( (message,idx) => {
      return (
      <li key={idx}>{message}</li>
      )
      })
      }
      </ul><br/><br/>
      <button onClick={this.localNormalFunction}>dsadsdsa</button>
      <h2>{this.props.NewReducer}</h2>
      <h2>{this.props.simpleReducer.result}</h2>

      </div>
      );
      }
      }





      export default (state = , action) => {
      switch (action.type) {
      case 'ADD':
      return [
      ...state,
      action.message
      ];
      default:
      return state;
      }
      };





      export default (state = , action) => {
      switch (action.type) {
      case 'ADD':
      return [
      ...state,
      action.message
      ];
      default:
      return state;
      }
      };





      export default (state = {}, action) => {
      switch (action.type) {
      case 'SIMPLE_ACTION':
      return {
      result: action.payload
      }
      default:
      return state
      }
      }





      export default (state = {}, action) => {
      switch (action.type) {
      case 'SIMPLE_ACTION':
      return {
      result: action.payload
      }
      default:
      return state
      }
      }





      export default (state = '', action) => {
      switch (action.type) {
      case 'AnyThing':
      return action.WhatToDisplay;
      default:
      return state;
      }
      };





      export default (state = '', action) => {
      switch (action.type) {
      case 'AnyThing':
      return action.WhatToDisplay;
      default:
      return state;
      }
      };






      javascript reactjs react-redux create-react-app






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Jan 3 at 15:53







      Amr

















      asked Jan 3 at 15:07









      Amr Amr

      134




      134
























          1 Answer
          1






          active

          oldest

          votes


















          0














          It is better practice to get only the props you need from redux in each component. If you pass the whole redux state in mapStateToProps then whenever anything in redux changes you will have everything rerendering even if nothing you use changed.



          One common reason you might be getting errors is that you are trying to use the props in render and they get instantiated afterwards.



          Try this give default values to the props if you can't get them from redux:



          App.defaultProps = {
          result: '',
          NewReducer: '',
          messageReducer:
          }

          const mapStateToProps = state => ({
          result: state.simpleReducer.result,
          NewReducer: state.NewReducer,
          messageReducer: state.messageReducer
          })


          and then change this.props.simpleReducer.result to this.props.result






          share|improve this answer


























          • that was my initial code but i failed to implement it and winded up with errors, only this was able to remove them,if it is not much trouble, can you please edit my code ?

            – Amr
            Jan 3 at 15:13











          • can you please add the initial state of each reducer you have in your post?

            – Panos Bechlivanos
            Jan 3 at 15:20











          • Done.I added the rest of the reducers.

            – Amr
            Jan 3 at 15:26











          • I have updated my answer but i don't see the messageReducer still in your post, just the action creator

            – Panos Bechlivanos
            Jan 3 at 15:44











          • My mistake sorry, i just added it and made it bold

            – Amr
            Jan 3 at 15:54












          Your Answer






          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "1"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54024912%2fimplementing-redux-in-react-using-the-create-react-app-simple-question%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          1 Answer
          1






          active

          oldest

          votes








          1 Answer
          1






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes









          0














          It is better practice to get only the props you need from redux in each component. If you pass the whole redux state in mapStateToProps then whenever anything in redux changes you will have everything rerendering even if nothing you use changed.



          One common reason you might be getting errors is that you are trying to use the props in render and they get instantiated afterwards.



          Try this give default values to the props if you can't get them from redux:



          App.defaultProps = {
          result: '',
          NewReducer: '',
          messageReducer:
          }

          const mapStateToProps = state => ({
          result: state.simpleReducer.result,
          NewReducer: state.NewReducer,
          messageReducer: state.messageReducer
          })


          and then change this.props.simpleReducer.result to this.props.result






          share|improve this answer


























          • that was my initial code but i failed to implement it and winded up with errors, only this was able to remove them,if it is not much trouble, can you please edit my code ?

            – Amr
            Jan 3 at 15:13











          • can you please add the initial state of each reducer you have in your post?

            – Panos Bechlivanos
            Jan 3 at 15:20











          • Done.I added the rest of the reducers.

            – Amr
            Jan 3 at 15:26











          • I have updated my answer but i don't see the messageReducer still in your post, just the action creator

            – Panos Bechlivanos
            Jan 3 at 15:44











          • My mistake sorry, i just added it and made it bold

            – Amr
            Jan 3 at 15:54
















          0














          It is better practice to get only the props you need from redux in each component. If you pass the whole redux state in mapStateToProps then whenever anything in redux changes you will have everything rerendering even if nothing you use changed.



          One common reason you might be getting errors is that you are trying to use the props in render and they get instantiated afterwards.



          Try this give default values to the props if you can't get them from redux:



          App.defaultProps = {
          result: '',
          NewReducer: '',
          messageReducer:
          }

          const mapStateToProps = state => ({
          result: state.simpleReducer.result,
          NewReducer: state.NewReducer,
          messageReducer: state.messageReducer
          })


          and then change this.props.simpleReducer.result to this.props.result






          share|improve this answer


























          • that was my initial code but i failed to implement it and winded up with errors, only this was able to remove them,if it is not much trouble, can you please edit my code ?

            – Amr
            Jan 3 at 15:13











          • can you please add the initial state of each reducer you have in your post?

            – Panos Bechlivanos
            Jan 3 at 15:20











          • Done.I added the rest of the reducers.

            – Amr
            Jan 3 at 15:26











          • I have updated my answer but i don't see the messageReducer still in your post, just the action creator

            – Panos Bechlivanos
            Jan 3 at 15:44











          • My mistake sorry, i just added it and made it bold

            – Amr
            Jan 3 at 15:54














          0












          0








          0







          It is better practice to get only the props you need from redux in each component. If you pass the whole redux state in mapStateToProps then whenever anything in redux changes you will have everything rerendering even if nothing you use changed.



          One common reason you might be getting errors is that you are trying to use the props in render and they get instantiated afterwards.



          Try this give default values to the props if you can't get them from redux:



          App.defaultProps = {
          result: '',
          NewReducer: '',
          messageReducer:
          }

          const mapStateToProps = state => ({
          result: state.simpleReducer.result,
          NewReducer: state.NewReducer,
          messageReducer: state.messageReducer
          })


          and then change this.props.simpleReducer.result to this.props.result






          share|improve this answer















          It is better practice to get only the props you need from redux in each component. If you pass the whole redux state in mapStateToProps then whenever anything in redux changes you will have everything rerendering even if nothing you use changed.



          One common reason you might be getting errors is that you are trying to use the props in render and they get instantiated afterwards.



          Try this give default values to the props if you can't get them from redux:



          App.defaultProps = {
          result: '',
          NewReducer: '',
          messageReducer:
          }

          const mapStateToProps = state => ({
          result: state.simpleReducer.result,
          NewReducer: state.NewReducer,
          messageReducer: state.messageReducer
          })


          and then change this.props.simpleReducer.result to this.props.result







          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited Jan 3 at 15:44

























          answered Jan 3 at 15:10









          Panos BechlivanosPanos Bechlivanos

          65014




          65014













          • that was my initial code but i failed to implement it and winded up with errors, only this was able to remove them,if it is not much trouble, can you please edit my code ?

            – Amr
            Jan 3 at 15:13











          • can you please add the initial state of each reducer you have in your post?

            – Panos Bechlivanos
            Jan 3 at 15:20











          • Done.I added the rest of the reducers.

            – Amr
            Jan 3 at 15:26











          • I have updated my answer but i don't see the messageReducer still in your post, just the action creator

            – Panos Bechlivanos
            Jan 3 at 15:44











          • My mistake sorry, i just added it and made it bold

            – Amr
            Jan 3 at 15:54



















          • that was my initial code but i failed to implement it and winded up with errors, only this was able to remove them,if it is not much trouble, can you please edit my code ?

            – Amr
            Jan 3 at 15:13











          • can you please add the initial state of each reducer you have in your post?

            – Panos Bechlivanos
            Jan 3 at 15:20











          • Done.I added the rest of the reducers.

            – Amr
            Jan 3 at 15:26











          • I have updated my answer but i don't see the messageReducer still in your post, just the action creator

            – Panos Bechlivanos
            Jan 3 at 15:44











          • My mistake sorry, i just added it and made it bold

            – Amr
            Jan 3 at 15:54

















          that was my initial code but i failed to implement it and winded up with errors, only this was able to remove them,if it is not much trouble, can you please edit my code ?

          – Amr
          Jan 3 at 15:13





          that was my initial code but i failed to implement it and winded up with errors, only this was able to remove them,if it is not much trouble, can you please edit my code ?

          – Amr
          Jan 3 at 15:13













          can you please add the initial state of each reducer you have in your post?

          – Panos Bechlivanos
          Jan 3 at 15:20





          can you please add the initial state of each reducer you have in your post?

          – Panos Bechlivanos
          Jan 3 at 15:20













          Done.I added the rest of the reducers.

          – Amr
          Jan 3 at 15:26





          Done.I added the rest of the reducers.

          – Amr
          Jan 3 at 15:26













          I have updated my answer but i don't see the messageReducer still in your post, just the action creator

          – Panos Bechlivanos
          Jan 3 at 15:44





          I have updated my answer but i don't see the messageReducer still in your post, just the action creator

          – Panos Bechlivanos
          Jan 3 at 15:44













          My mistake sorry, i just added it and made it bold

          – Amr
          Jan 3 at 15:54





          My mistake sorry, i just added it and made it bold

          – Amr
          Jan 3 at 15:54




















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Stack Overflow!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54024912%2fimplementing-redux-in-react-using-the-create-react-app-simple-question%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          'app-layout' is not a known element: how to share Component with different Modules

          android studio warns about leanback feature tag usage required on manifest while using Unity exported app?

          WPF add header to Image with URL pettitions [duplicate]