user10298495
user10298495

Reputation:

How to use Redux with React

What I Just want to fetch data from api and show it at frontend. I am using Redux to call the api using it's ACTIONS and REDUCERS. In Reducers i take the intialstate as empty array.When API is successfully called, I am updating store state.Below is the practical which can help to understand concept easily.

store.js

import { createStore } from 'redux';
import reducer from './reducers/reducer';

let store = createStore(reducer)
export default store

actions.js

import { 
 FETCH_IMAGES_SUCCESS
} from './actionTypes'

export function fetchImages() {
  return dispatch => {
   return fetch("https://api.com/data")
   .then(res => res.json())
   .then(json => {
     dispatch(fetchImagesSuccess(json.posts));
    return json.posts;
   })
  };
}

export const fetchImagesSuccess = images => ({
  type: FETCH_IMAGES_SUCCESS,
  payload: { images }
});

reducer.js

import {
 FETCH_IMAGES_SUCCESS
} from '../actions/actionTypes'

const initialState = {
 images:[] 
}

const reducer = (state = initialState, action) => {
  switch (action.type) {
    case FETCH_IMAGES_SUCCESS:
     return {...state,images:action.payload.images}
    default:
     return state
  }
}

export default reducer;

Now, Please tell me what should i need to do to call that Redux action and get Data from the API.I am using React to display data.

Thanks.

Upvotes: 0

Views: 133

Answers (4)

Kanan Farzali
Kanan Farzali

Reputation: 1053

You need to use mapStateToProps similar to the code below. Let say your reducer is called test and it is part of a state.

const mapStateToProps = (state, props) =>
({
    router: props.router,
    test: state.test
});

Then test will be used as a property in a React class. Obviously you need to include respective imports for React.

Upvotes: 0

giwiro
giwiro

Reputation: 336

As Mustafa said you need to use mapStateToProps. Let me explain myself.

What you just done is just the configuration for the main store (there's only one in redux). Now you need to use it in your components, but how ? When you create a Component the content of the store will be passed as props with the help of Containers.

Containers are the way to link your store with your react component.

Said that, you need to install redux and react-redux. In your code above you have successfully configured the store with the reducers with redux library. Now you need react-redux to create the Container (which wraps your react component).

Here is an example of how to put this all together: https://codepen.io/anon/pen/RqKyQZ?editors=1010

Upvotes: 0

Ashish Kirodian
Ashish Kirodian

Reputation: 946

You need a middleware like Redux-Saga or Redux-Thunk to talk with the actions and the global store maintained using Redux. You may follow this Tutorial: https://redux.js.org/basics/exampletodolist

If you are going with Redux-Thunk, you need to modify your store assign like this:

const store = createStore(rootReducer, applyMiddleware(thunk));

Now, have a container to all the Parent component you have.

import { connect  } from 'react-redux';
import App from '../components/App';


export function mapStateToProps(appState) {

  return {
  /* this is where you get your store data through the reducer returned 
  state */
  };
}

export function mapDispatchToProps(dispatch) {
  return {
   // make all your action dispatches here
// for ex: getData(payload) => dispatch({type: GETDATA, payload: payload})

  };
}

export default connect(mapStateToProps, mapDispatchToProps)(App);

Upvotes: 0

Mustafa Mohamed
Mustafa Mohamed

Reputation: 31

In React redux usage page you can use functions like mapStateToProps and connect to do that

Upvotes: 3

Related Questions