The best way to do what you want is to use Redux .
So you will have a stream like this:

You see that the UI is defined by State and there is a unique Store that contains the State application? This is why Redux works great in your use case.
You can save State in your Store , for example:
cryptoPorfolio: { // this is the name of the reducer, it will be part of the state tree, read below coin: '' }
Now you can update this State run action in the “UI”, which will be sent to Reducer , which will finally do the update. Something like that:
Act
{ type: 'UPDATE_COIN', coinName: 'ETH' }
Action Creator (just functions that can be launched by the user interface)
function updateCoin(coin) { return { type: 'UPDATE_COIN', coinName: 'Ethereum' } }
You can use bindActionCreators from react-redux to pass the action creator to your component.
Then, in your component, you call the action creator as a normal function, passed as a support, to send the action to the reducer.
Finally, in the gearbox, you can update the Store . For instance:
function cryptoPorfolio(state = initialState, action) { switch (action.type) { case UPDATE_COIN: return Object.assign({}, state, { coin: action.coinName }) default: return state } }
For more information, see Using Redux with React .