How does redux state changes but component doesn't












-1















I'm writing a independent modal using React and Redux. I pass from my environment variable if modal is visible and initial position and the rest of the state in redux store.



I've tried using react lifecycle methods to force update my app but nothing seems to work.



This is how I connect my App with store:



render() {
const {
media, initPosition, isMobile, title, isVisible, onClose
} = this.props;



const photos = media.filter(
item => typeof item.video === 'undefined'
);
const videos = media.filter(
item => typeof item.video !== 'undefined'
);
const initState = {
media: {
items: media,
filteredItems: {
all: media,
photos,
videos
},
filter: 'all',
initPosition,
currentPosition: initPosition
},
gallery: {
isMobile,
title
}
};

const store = createStore(
reducer,
initState,
composeEnhancers(applyMiddleware(...middleware))
);

return (
<Provider store={store}>
<App onClose={e => onClose(e)} isVisible={isVisible} />
</Provider>
);


I call my modal like this:



<Gallery
media={videos.concat(photos)}
isMobile={isMobile}
isVisible={show}
onClose={() => this.setState({ show: false })}
initPosition={position}
changePosition={position => this.setState({ position })}
title="Maximus"/>


And this is how I connect it to the state:



function mapStateToProps(state) {
const { media, gallery } = state;
const {
filteredItems, filter, currentPosition, initPosition
} = media;
const { isMobile, title } = gallery;
return {
filteredMedia: filteredItems,
filter,
currentPosition,
initPosition,
isMobile,
title
};
}

function mapDispatchToProps(dispatch) {
return bindActionCreators({
changeMediaProp
}, dispatch);
}

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


After isVisible is changed nothing seem to work with redux store. It is changing, but the app isn't updating.



When I toggle modal (change isVisible prop), redux state keeps changing, but my app isn't rerendering.



So to sum it up. I change isVisible and initPosition from surrounded application( these props are not stored in store), and when I changed them my component can't react to changes from reducer store.










share|improve this question




















  • 1





    How do you connect the app to the Redux store?

    – Matthew Herbst
    Jan 2 at 22:00






  • 1





    Are you using react-redux? If yes, are you using connect? You should post the code for the Gallery component so we have these answers and are able to help you.

    – NULL SWEΔT
    Jan 2 at 22:16
















-1















I'm writing a independent modal using React and Redux. I pass from my environment variable if modal is visible and initial position and the rest of the state in redux store.



I've tried using react lifecycle methods to force update my app but nothing seems to work.



This is how I connect my App with store:



render() {
const {
media, initPosition, isMobile, title, isVisible, onClose
} = this.props;



const photos = media.filter(
item => typeof item.video === 'undefined'
);
const videos = media.filter(
item => typeof item.video !== 'undefined'
);
const initState = {
media: {
items: media,
filteredItems: {
all: media,
photos,
videos
},
filter: 'all',
initPosition,
currentPosition: initPosition
},
gallery: {
isMobile,
title
}
};

const store = createStore(
reducer,
initState,
composeEnhancers(applyMiddleware(...middleware))
);

return (
<Provider store={store}>
<App onClose={e => onClose(e)} isVisible={isVisible} />
</Provider>
);


I call my modal like this:



<Gallery
media={videos.concat(photos)}
isMobile={isMobile}
isVisible={show}
onClose={() => this.setState({ show: false })}
initPosition={position}
changePosition={position => this.setState({ position })}
title="Maximus"/>


And this is how I connect it to the state:



function mapStateToProps(state) {
const { media, gallery } = state;
const {
filteredItems, filter, currentPosition, initPosition
} = media;
const { isMobile, title } = gallery;
return {
filteredMedia: filteredItems,
filter,
currentPosition,
initPosition,
isMobile,
title
};
}

function mapDispatchToProps(dispatch) {
return bindActionCreators({
changeMediaProp
}, dispatch);
}

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


After isVisible is changed nothing seem to work with redux store. It is changing, but the app isn't updating.



When I toggle modal (change isVisible prop), redux state keeps changing, but my app isn't rerendering.



So to sum it up. I change isVisible and initPosition from surrounded application( these props are not stored in store), and when I changed them my component can't react to changes from reducer store.










share|improve this question




















  • 1





    How do you connect the app to the Redux store?

    – Matthew Herbst
    Jan 2 at 22:00






  • 1





    Are you using react-redux? If yes, are you using connect? You should post the code for the Gallery component so we have these answers and are able to help you.

    – NULL SWEΔT
    Jan 2 at 22:16














-1












-1








-1








I'm writing a independent modal using React and Redux. I pass from my environment variable if modal is visible and initial position and the rest of the state in redux store.



I've tried using react lifecycle methods to force update my app but nothing seems to work.



This is how I connect my App with store:



render() {
const {
media, initPosition, isMobile, title, isVisible, onClose
} = this.props;



const photos = media.filter(
item => typeof item.video === 'undefined'
);
const videos = media.filter(
item => typeof item.video !== 'undefined'
);
const initState = {
media: {
items: media,
filteredItems: {
all: media,
photos,
videos
},
filter: 'all',
initPosition,
currentPosition: initPosition
},
gallery: {
isMobile,
title
}
};

const store = createStore(
reducer,
initState,
composeEnhancers(applyMiddleware(...middleware))
);

return (
<Provider store={store}>
<App onClose={e => onClose(e)} isVisible={isVisible} />
</Provider>
);


I call my modal like this:



<Gallery
media={videos.concat(photos)}
isMobile={isMobile}
isVisible={show}
onClose={() => this.setState({ show: false })}
initPosition={position}
changePosition={position => this.setState({ position })}
title="Maximus"/>


And this is how I connect it to the state:



function mapStateToProps(state) {
const { media, gallery } = state;
const {
filteredItems, filter, currentPosition, initPosition
} = media;
const { isMobile, title } = gallery;
return {
filteredMedia: filteredItems,
filter,
currentPosition,
initPosition,
isMobile,
title
};
}

function mapDispatchToProps(dispatch) {
return bindActionCreators({
changeMediaProp
}, dispatch);
}

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


After isVisible is changed nothing seem to work with redux store. It is changing, but the app isn't updating.



When I toggle modal (change isVisible prop), redux state keeps changing, but my app isn't rerendering.



So to sum it up. I change isVisible and initPosition from surrounded application( these props are not stored in store), and when I changed them my component can't react to changes from reducer store.










share|improve this question
















I'm writing a independent modal using React and Redux. I pass from my environment variable if modal is visible and initial position and the rest of the state in redux store.



I've tried using react lifecycle methods to force update my app but nothing seems to work.



This is how I connect my App with store:



render() {
const {
media, initPosition, isMobile, title, isVisible, onClose
} = this.props;



const photos = media.filter(
item => typeof item.video === 'undefined'
);
const videos = media.filter(
item => typeof item.video !== 'undefined'
);
const initState = {
media: {
items: media,
filteredItems: {
all: media,
photos,
videos
},
filter: 'all',
initPosition,
currentPosition: initPosition
},
gallery: {
isMobile,
title
}
};

const store = createStore(
reducer,
initState,
composeEnhancers(applyMiddleware(...middleware))
);

return (
<Provider store={store}>
<App onClose={e => onClose(e)} isVisible={isVisible} />
</Provider>
);


I call my modal like this:



<Gallery
media={videos.concat(photos)}
isMobile={isMobile}
isVisible={show}
onClose={() => this.setState({ show: false })}
initPosition={position}
changePosition={position => this.setState({ position })}
title="Maximus"/>


And this is how I connect it to the state:



function mapStateToProps(state) {
const { media, gallery } = state;
const {
filteredItems, filter, currentPosition, initPosition
} = media;
const { isMobile, title } = gallery;
return {
filteredMedia: filteredItems,
filter,
currentPosition,
initPosition,
isMobile,
title
};
}

function mapDispatchToProps(dispatch) {
return bindActionCreators({
changeMediaProp
}, dispatch);
}

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


After isVisible is changed nothing seem to work with redux store. It is changing, but the app isn't updating.



When I toggle modal (change isVisible prop), redux state keeps changing, but my app isn't rerendering.



So to sum it up. I change isVisible and initPosition from surrounded application( these props are not stored in store), and when I changed them my component can't react to changes from reducer store.







reactjs npm redux






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Jan 3 at 7:34







olga_babic

















asked Jan 2 at 21:55









olga_babicolga_babic

1111110




1111110








  • 1





    How do you connect the app to the Redux store?

    – Matthew Herbst
    Jan 2 at 22:00






  • 1





    Are you using react-redux? If yes, are you using connect? You should post the code for the Gallery component so we have these answers and are able to help you.

    – NULL SWEΔT
    Jan 2 at 22:16














  • 1





    How do you connect the app to the Redux store?

    – Matthew Herbst
    Jan 2 at 22:00






  • 1





    Are you using react-redux? If yes, are you using connect? You should post the code for the Gallery component so we have these answers and are able to help you.

    – NULL SWEΔT
    Jan 2 at 22:16








1




1





How do you connect the app to the Redux store?

– Matthew Herbst
Jan 2 at 22:00





How do you connect the app to the Redux store?

– Matthew Herbst
Jan 2 at 22:00




1




1





Are you using react-redux? If yes, are you using connect? You should post the code for the Gallery component so we have these answers and are able to help you.

– NULL SWEΔT
Jan 2 at 22:16





Are you using react-redux? If yes, are you using connect? You should post the code for the Gallery component so we have these answers and are able to help you.

– NULL SWEΔT
Jan 2 at 22:16












2 Answers
2






active

oldest

votes


















1














I was passing multiple stores to my application. I fixed it by saving store in constructor and not creating it multiple times.



 let newStore = store;
if (!newStore) {
newStore = createStore(
reducer,
initState,
composeEnhancers(applyMiddleware(...middleware))
);
this.setState({ store: newStore });
}


return (
<Provider store={newStore}>
<App onClose={e => onClose(e)} isVisible={isVisible} />
</Provider>
);


Does anyone have any better solution?






share|improve this answer


























  • There are react-redux methods to combine reducers, so you have a single store. save your store in a file and import it into the main component so you have a single store as explained here, redux.js.org/api/combinereducers read more about common gotchas here getstream.io/blog/react-redux-best-practices-gotchas

    – Dvid Silva
    Jan 4 at 3:05



















0














Your code doesn't have enough information to know. Are you using connect and react-redux. Here's a good intro if you need some help.



https://www.sohamkamani.com/blog/2017/03/31/react-redux-connect-explained/



An example component would look like this:



import { connect } from 'react-redux'

const TodoItem = ({ todo, destroyTodo }) => {
return (
<div>
{todo.text}
<span onClick={destroyTodo}> x </span>
</div>
)
}

const mapStateToProps = state => {
return {
todo: state.todos[0]
}
}

const mapDispatchToProps = dispatch => {
return {
destroyTodo: () =>
dispatch({
type: 'DESTROY_TODO'
})
}
}

export default connect(
mapStateToProps,
mapDispatchToProps,
)(TodoItem)





share|improve this answer
























  • Sorry, I edited my question with more information (how I connected the app with store and how to connect single component with store.

    – olga_babic
    Jan 3 at 7:34












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%2f54013681%2fhow-does-redux-state-changes-but-component-doesnt%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























2 Answers
2






active

oldest

votes








2 Answers
2






active

oldest

votes









active

oldest

votes






active

oldest

votes









1














I was passing multiple stores to my application. I fixed it by saving store in constructor and not creating it multiple times.



 let newStore = store;
if (!newStore) {
newStore = createStore(
reducer,
initState,
composeEnhancers(applyMiddleware(...middleware))
);
this.setState({ store: newStore });
}


return (
<Provider store={newStore}>
<App onClose={e => onClose(e)} isVisible={isVisible} />
</Provider>
);


Does anyone have any better solution?






share|improve this answer


























  • There are react-redux methods to combine reducers, so you have a single store. save your store in a file and import it into the main component so you have a single store as explained here, redux.js.org/api/combinereducers read more about common gotchas here getstream.io/blog/react-redux-best-practices-gotchas

    – Dvid Silva
    Jan 4 at 3:05
















1














I was passing multiple stores to my application. I fixed it by saving store in constructor and not creating it multiple times.



 let newStore = store;
if (!newStore) {
newStore = createStore(
reducer,
initState,
composeEnhancers(applyMiddleware(...middleware))
);
this.setState({ store: newStore });
}


return (
<Provider store={newStore}>
<App onClose={e => onClose(e)} isVisible={isVisible} />
</Provider>
);


Does anyone have any better solution?






share|improve this answer


























  • There are react-redux methods to combine reducers, so you have a single store. save your store in a file and import it into the main component so you have a single store as explained here, redux.js.org/api/combinereducers read more about common gotchas here getstream.io/blog/react-redux-best-practices-gotchas

    – Dvid Silva
    Jan 4 at 3:05














1












1








1







I was passing multiple stores to my application. I fixed it by saving store in constructor and not creating it multiple times.



 let newStore = store;
if (!newStore) {
newStore = createStore(
reducer,
initState,
composeEnhancers(applyMiddleware(...middleware))
);
this.setState({ store: newStore });
}


return (
<Provider store={newStore}>
<App onClose={e => onClose(e)} isVisible={isVisible} />
</Provider>
);


Does anyone have any better solution?






share|improve this answer















I was passing multiple stores to my application. I fixed it by saving store in constructor and not creating it multiple times.



 let newStore = store;
if (!newStore) {
newStore = createStore(
reducer,
initState,
composeEnhancers(applyMiddleware(...middleware))
);
this.setState({ store: newStore });
}


return (
<Provider store={newStore}>
<App onClose={e => onClose(e)} isVisible={isVisible} />
</Provider>
);


Does anyone have any better solution?







share|improve this answer














share|improve this answer



share|improve this answer








edited Jan 3 at 9:19

























answered Jan 3 at 7:59









olga_babicolga_babic

1111110




1111110













  • There are react-redux methods to combine reducers, so you have a single store. save your store in a file and import it into the main component so you have a single store as explained here, redux.js.org/api/combinereducers read more about common gotchas here getstream.io/blog/react-redux-best-practices-gotchas

    – Dvid Silva
    Jan 4 at 3:05



















  • There are react-redux methods to combine reducers, so you have a single store. save your store in a file and import it into the main component so you have a single store as explained here, redux.js.org/api/combinereducers read more about common gotchas here getstream.io/blog/react-redux-best-practices-gotchas

    – Dvid Silva
    Jan 4 at 3:05

















There are react-redux methods to combine reducers, so you have a single store. save your store in a file and import it into the main component so you have a single store as explained here, redux.js.org/api/combinereducers read more about common gotchas here getstream.io/blog/react-redux-best-practices-gotchas

– Dvid Silva
Jan 4 at 3:05





There are react-redux methods to combine reducers, so you have a single store. save your store in a file and import it into the main component so you have a single store as explained here, redux.js.org/api/combinereducers read more about common gotchas here getstream.io/blog/react-redux-best-practices-gotchas

– Dvid Silva
Jan 4 at 3:05













0














Your code doesn't have enough information to know. Are you using connect and react-redux. Here's a good intro if you need some help.



https://www.sohamkamani.com/blog/2017/03/31/react-redux-connect-explained/



An example component would look like this:



import { connect } from 'react-redux'

const TodoItem = ({ todo, destroyTodo }) => {
return (
<div>
{todo.text}
<span onClick={destroyTodo}> x </span>
</div>
)
}

const mapStateToProps = state => {
return {
todo: state.todos[0]
}
}

const mapDispatchToProps = dispatch => {
return {
destroyTodo: () =>
dispatch({
type: 'DESTROY_TODO'
})
}
}

export default connect(
mapStateToProps,
mapDispatchToProps,
)(TodoItem)





share|improve this answer
























  • Sorry, I edited my question with more information (how I connected the app with store and how to connect single component with store.

    – olga_babic
    Jan 3 at 7:34
















0














Your code doesn't have enough information to know. Are you using connect and react-redux. Here's a good intro if you need some help.



https://www.sohamkamani.com/blog/2017/03/31/react-redux-connect-explained/



An example component would look like this:



import { connect } from 'react-redux'

const TodoItem = ({ todo, destroyTodo }) => {
return (
<div>
{todo.text}
<span onClick={destroyTodo}> x </span>
</div>
)
}

const mapStateToProps = state => {
return {
todo: state.todos[0]
}
}

const mapDispatchToProps = dispatch => {
return {
destroyTodo: () =>
dispatch({
type: 'DESTROY_TODO'
})
}
}

export default connect(
mapStateToProps,
mapDispatchToProps,
)(TodoItem)





share|improve this answer
























  • Sorry, I edited my question with more information (how I connected the app with store and how to connect single component with store.

    – olga_babic
    Jan 3 at 7:34














0












0








0







Your code doesn't have enough information to know. Are you using connect and react-redux. Here's a good intro if you need some help.



https://www.sohamkamani.com/blog/2017/03/31/react-redux-connect-explained/



An example component would look like this:



import { connect } from 'react-redux'

const TodoItem = ({ todo, destroyTodo }) => {
return (
<div>
{todo.text}
<span onClick={destroyTodo}> x </span>
</div>
)
}

const mapStateToProps = state => {
return {
todo: state.todos[0]
}
}

const mapDispatchToProps = dispatch => {
return {
destroyTodo: () =>
dispatch({
type: 'DESTROY_TODO'
})
}
}

export default connect(
mapStateToProps,
mapDispatchToProps,
)(TodoItem)





share|improve this answer













Your code doesn't have enough information to know. Are you using connect and react-redux. Here's a good intro if you need some help.



https://www.sohamkamani.com/blog/2017/03/31/react-redux-connect-explained/



An example component would look like this:



import { connect } from 'react-redux'

const TodoItem = ({ todo, destroyTodo }) => {
return (
<div>
{todo.text}
<span onClick={destroyTodo}> x </span>
</div>
)
}

const mapStateToProps = state => {
return {
todo: state.todos[0]
}
}

const mapDispatchToProps = dispatch => {
return {
destroyTodo: () =>
dispatch({
type: 'DESTROY_TODO'
})
}
}

export default connect(
mapStateToProps,
mapDispatchToProps,
)(TodoItem)






share|improve this answer












share|improve this answer



share|improve this answer










answered Jan 3 at 0:09









Dvid SilvaDvid Silva

559913




559913













  • Sorry, I edited my question with more information (how I connected the app with store and how to connect single component with store.

    – olga_babic
    Jan 3 at 7:34



















  • Sorry, I edited my question with more information (how I connected the app with store and how to connect single component with store.

    – olga_babic
    Jan 3 at 7:34

















Sorry, I edited my question with more information (how I connected the app with store and how to connect single component with store.

– olga_babic
Jan 3 at 7:34





Sorry, I edited my question with more information (how I connected the app with store and how to connect single component with store.

– olga_babic
Jan 3 at 7:34


















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%2f54013681%2fhow-does-redux-state-changes-but-component-doesnt%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

MongoDB - Not Authorized To Execute Command

How to fix TextFormField cause rebuild widget in Flutter

in spring boot 2.1 many test slices are not allowed anymore due to multiple @BootstrapWith