-
Notifications
You must be signed in to change notification settings - Fork 56
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Best way to implement Provider / connect( ... ) for React components using freezer? #92
Comments
Hey @richardanaya Good question! Since freezer doesn't force you to organize your data in any way I am really interested in knowing how people access to it. I can explain what I do, and it works nice for me. First, I use to refresh the full app when any change happens in the store, so I don't need to connect components to parts of the store, they will be always re-rendered. I found out that trying to render parts selectively when changes happen in a part of the store is an easy way of get out of sync with the store and makes your app exponentially more complex. It's easier to not to render the components using In my apps I organize the freezer's store by domains. So imagine that I have two entities {
usersDomain: { /* all the user data here */ },
carsDomain: { /* all the car data here */ }
} So the challenge is making those domains easily accessible by certain components. For example an Currently in my apps I pass the store's state down from the root component to the children using props: <Child store={ freezer.get() } /> And I create a getDomain function in thoshe children that access often to the same part of the store: getDomain(){
return this.props.store.userDomain;
} Add this method to every children is not very beautiful :) So I understand that you miss something like import React from 'react';
import FreezerStore from 'path/to/your/FreezerStore';
export default function connect( Component, domains ) {
return function ConnectedComponent( props ){
var storeDomains = {};
domains.forEach( d => {
storeDomains[d] = FreezerStore.get()[ d + 'Domain' ];
});
return <Component { ...props } { ...storeDomains } />;
}
} This way we get a import React from 'react';
import connect from 'path/to/connect';
class UsersAndCars extends React.Component {
render(){
// here I can use this.props.users and this.props.cars
}
}
export default connect( UsersAndCars, ['users', 'cars'] ); I have not tried the code above, I have just coded it on the fly, so maybe it's buggy. I am very interested in your thoughts about the way of organizing the data and also problems you are having with structuring the store with freezer. |
Thanks! I like this idea. On Aug 4, 2016 4:33 AM, "arqex" notifications@github.com wrote:
|
Do any of you have any suggestions for projects or patterns to create a connect(...) for freezer?
The text was updated successfully, but these errors were encountered: