μλ νμΈμ μ¬λ¬λΆ,
μ΅μ μ±μμ react-router λ° reduxλ₯Ό μ¬μ©νκ³ μμΌλ©° νμ¬ URL λ§€κ° λ³μ λ° μΏΌλ¦¬μ λ°λΌ νμν μν λ³κ²½κ³Ό κ΄λ ¨λ λͺ κ°μ§ λ¬Έμ μ μ§λ©΄νκ³ μμ΅λλ€.
κΈ°λ³Έμ μΌλ‘ URLμ΄ λ³κ²½ λ λλ§λ€ μνλ₯Ό μ λ°μ΄νΈν΄μΌνλ κ΅¬μ± μμκ° μμ΅λλ€. μνλ μ΄λ κ² λ°μ½λ μ΄ν°λ₯Ό μ¬μ©νμ¬ reduxμ μν΄ propsλ₯Ό ν΅ν΄ μ λ¬λ©λλ€.
@connect(state => ({
campaigngroups: state.jobresults.campaigngroups,
error: state.jobresults.error,
loading: state.jobresults.loading
}))
URLμ΄ this.props.params
λ° this.props.query
μμ λ³κ²½ λ λ react-routerκ° νΈλ€λ¬μ μλ‘μ΄ propsλ₯Ό μ λ¬νκΈ° λλ¬Έμ react-routerμμ μ€λ URL λ³κ²½μ μλ΅νκΈ° μν΄ componentWillReceiveProps
lifecycle λ©μλλ₯Ό μ¬μ©νκ³ μμ΅λλ€. this.props.query
-μ΄ μ κ·Ό λ°©μμ μ£Όμ λ¬Έμ λ μνλ₯Ό μ
λ°μ΄νΈνκΈ° μν΄μ΄ λ©μλμμ μμ
μ μ€ννκ³ μλ€λ κ²μ
λλ€. κ·Έλ° λ€μ λμΌν μλͺ
μ£ΌκΈ° λ©μλλ₯Ό λ€μ νΈλ¦¬κ±°νλ κ΅¬μ± μμμ μ propsλ₯Ό μ λ¬ν©λλ€. λ°λΌμ κΈ°λ³Έμ μΌλ‘ 무ν μμ± λ£¨ν, νμ¬ λλ μ΄κ²μ λ§κΈ° μν΄ μν λ³μλ₯Ό μ€μ νκ³ μμ΅λλ€.
componentWillReceiveProps(nextProps) {
if (this.state.shouldupdate) {
let { slug } = nextProps.params;
let { citizenships, discipline, workright, location } = nextProps.query;
const params = { slug, discipline, workright, location };
let filters = this._getFilters(params);
// set the state accroding to the filters in the url
this._setState(params);
// trigger the action to refill the stores
this.actions.loadCampaignGroups(filters);
}
}
κ²½λ‘ μ νμ κΈ°λ°μΌλ‘ μμ
μ νΈλ¦¬κ±°νλ νμ€ μ κ·Ό λ°©μμ΄ μμ΅λκΉ? μλλ©΄ μνμ ν΅ν΄ μ λ¬νλ λμ κ΅¬μ± μμμ μνμ μμ μ μνλ₯Ό μ§μ μ°κ²°ν μ μμ΅λκΉ? willTransitionTo
μ μ λ©μλλ₯Ό μ¬μ©νλ €κ³ νμ§λ§ this.props.dispatchμ μ‘μΈμ€ ν μ μμ΅λλ€.
@deowk this.props
μ nextProps
λ₯Ό λΉκ΅νμ¬ κ΄λ ¨ λ°μ΄ν°κ° λ³κ²½λμλμ§ νμΈν μ μμ΅λλ€. λ³κ²½λμ§ μμ κ²½μ° μμ
μ λ€μ νΈλ¦¬κ±° ν νμκ° μμΌλ©° 무ν 루νλ₯Ό λ²μ΄λ μ μμ΅λλ€.
@johanneslumpe : μ κ²½μ°μλ μΊ νμΈ κ·Έλ£Ήμ΄ λ€μ ν° κ°μ²΄ λͺ¨μμ λλ€. μ΄λ° μμΌλ‘ κΉμ κ°μ²΄ λΉκ΅λ₯Ό 쑰건μΌλ‘ μ¬μ©νλ κ²μ΄ λΉν¨μ¨μ μΈ κ² κ°μ΅λλ€.
@deowk λΆλ³ λ°μ΄ν°λ₯Ό μ¬μ©νλ©΄ μ°Έμ‘°λ₯Ό λΉκ΅ν μ μμ΅λλ€.
@deowk μ΄ λ¬Έμ μλ λ λΆλΆμ΄ μμ΅λλ€. 첫 λ²μ§Έλ componentWillReceiveProps()
μ μν λ³κ²½μ μλ΅νλ λ° μ΄μμ μΈ λ°©λ²μ΄ μλλΌλ κ²μ
λλ€. λλΆλΆ Reduxμμ νλ κ²μ²λΌ μ μΌλ‘ μκ° λͺ
λ Ή μ μΌλ‘ μκ°ν΄μΌνκΈ° λλ¬Έμ
λλ€. ν΄κ²°μ±
μ νμ¬ λΌμ°ν° μ 보 (μμΉ, λ§€κ° λ³μ, 쿼리)λ₯Ό _inside_ μ μ₯μμ μ μ₯νλ κ²μ
λλ€. κ·Έλ¬λ©΄ λͺ¨λ μνκ° λμΌν μμΉμ μκ³ λλ¨Έμ§ λ°μ΄ν°μ λμΌν Redux APIλ₯Ό μ¬μ©νμ¬ κ΅¬λ
ν μ μμ΅λλ€.
νΈλ¦μ λΌμ°ν° μμΉκ° λ³κ²½ λ λλ§λ€ μ€νλλ μμ μ νμ λ§λλ κ²μ λλ€. μ΄κ²μ 곧 μΆμ λ React Router 1.0 λ²μ μμ μ½μ΅λλ€.
// routeLocationDidUpdate() is an action creator
// Only call it from here, nowhere else
BrowserHistory.listen(location => dispatch(routeLocationDidUpdate(location)));
μ΄μ μμ μνλ νμ λΌμ°ν° μνμ λκΈ°νλ©λλ€. κ·Έλ¬λ©΄ μμ κ΅¬μ± μμμμ 쿼리 λ§€κ° λ³μ λ³κ²½ λ° setState()
μ μλμΌλ‘ λ°μ ν νμκ° μμ΅λλ€. Reduxμ 컀λ₯ν°λ₯Ό μ¬μ©νκΈ° λ§νλ©΄λ©λλ€.
<Connector select={state => ({ filter: getFilters(store.router.params) })} />
λ¬Έμ μ λ λ²μ§Έ λΆλΆμ κ²½λ‘ λ³κ²½μ λν μλ΅μΌλ‘ μμ μ μ€ννλ κ²κ³Ό κ°μ΄ λ·° λ μ΄μ΄ μΈλΆμ Redux μν λ³κ²½μ λμνλ λ°©λ²μ΄ νμνλ€λ κ²μ λλ€. μνλ κ²½μ° μ€λͺ νλ κ²κ³Ό κ°μ κ°λ¨ν κ²½μ°μ componentWillReceivePropsλ₯Ό κ³μ μ¬μ©ν μ μμ΅λλ€.
νμ§λ§ λ 볡μ‘ν κ²½μ°λΌλ©΄ RxJSλ₯Ό μ¬μ©νλ κ²μ΄ μ’μ΅λλ€. μ΄κ²μ΄ λ°λ‘ μ΅μ λ² λΈμ΄ μ€κ³λ λ°μ λ°μ΄ν° νλ¦μ λλ€.
Reduxμμμ΄λ₯Ό μννλ €λ©΄ λ¨Όμ κ΄μ°° κ°λ₯ν μ€ν μ΄ μν μνμ€λ₯Ό μμ±ν©λλ€. redux-rxμ observableFromStore()
μ¬μ©νμ¬μ΄λ₯Ό μν ν μ μμ΅λλ€.
import { observableFromStore } from 'redux-rx';
const state$ = observableFromStore(store);
κ·Έλ° λ€μ νΉμ μν λ³κ²½μ ꡬλ νκΈ° μν΄ κ΄μ°° κ°λ₯ν μ°μ°μλ₯Ό μ¬μ©νλ©΄λ©λλ€. λ€μμ μ±κ³΅μ μΈ λ‘κ·ΈμΈ ν λ‘κ·ΈμΈ νμ΄μ§μμ 리λλ μ νλ μμ λλ€.
const didLogin$ = state$
.distinctUntilChanged(state => !state.loggedIn && state.router.path === '/login')
.filter(state => state.loggedIn && state.router.path === '/login');
didLogin$.subscribe({
router.transitionTo('/success');
});
μ΄ κ΅¬νμ componentDidReceiveProps()
μ κ°μ λͺ
λ Ήν ν¨ν΄μ μ¬μ©νλ λμΌν κΈ°λ₯λ³΄λ€ ν¨μ¬ κ°λ¨ν©λλ€.
λμμ΄ λμκΈ°λ₯Ό λ°λλλ€.
μ λ¬Έμμμ νμν©λλ€. λ무 μ μ°μ¬μ‘μ΅λλ€.
@acdlite : λλ¨ν κ°μ¬ν©λλ€. κ·νμ μ‘°μΈμ μ λ§ μ λ₯Ό λ§μ΄ λμμ΅λλ€.νμ§λ§ URL λ³κ²½μ λν μλ΅μΌλ‘ μ‘μ ν¬λ¦¬μμ΄ν°λ₯Ό νΈλ¦¬κ±°νμ¬ μ€ν μ΄μμ μνλ₯Ό λ³κ²½νλ λ° μ΄λ €μμ κ²ͺκ³ μμ΅λλ€.
μ΄κ²μ react-router v0.13.3μ μ μΌν μ΅μ μ²λΌ 보μ΄κΈ° λλ¬Έμ willTransitionTo μ μ λ©μλμμ μ‘μ μμ±μλ₯Ό νΈλ¦¬κ±°νκ³ μΆμ΅λλ€.
class Results extends Component {
..........
}
Results.willTransitionTo = function (transition, params, query) {
// how do I get a reference to dispatch here?
};
@deowk λ΄ μκ° μ redux μΈμ€ν΄μ€μμ μ§μ dispatch
νΈμΆνλ κ²μ
λλ€.
const redux = createRedux(stores);
BrowserHistory.listen(location => redux.dispatch(routeLocationDidUpdate(location)));
@deowk νμ¬ λ€μκ³Ό κ°μ΄ λ°μ λΌμ°ν° 0.13.3μμ URL λ³κ²½ μ¬νμ λ°μ‘ν©λλ€.
Router.run(routes, Router.HistoryLocation, function(Handler, locationState) {
dispatch(routeLocationDidUpdate(locationState))
React.render(<Handler/>, appEl);
});
@acdlite μ λ§ μ μ€λͺ
νμ΅λλ€! : +1 :
μ λ¬Έμμλ μμ΄μΌνλ€λ λ° λμν©λλ€. :)
μ°Έκ³ λ‘ BrowserHistory.history()
μ΄ BrowserHistory.addChangeListener()
λ³κ²½λμμ΅λλ€.
https://github.com/rackt/react-router/blob/master/modules/BrowserHistory.js#L57
νΈμ§νλ€:
λ€μκ³Ό κ°μ΄ λ³΄μΌ μ μμ΅λλ€.
history.addChangeListener(() => store.dispatch(routeLocationDidUpdate(location)));
κ·Έλ¦¬κ³ κ°μκΈ° @pburtchaellμ μ΄κΈ° μνλ μ΄λ»μ΅λκΉ?
λ€μ μ€μ μ΄ μμ΅λλ€.
// client.js
class App extends Component {
constructor(props) {
super(props);
this.history = new HashHistory();
}
render() {
return (
<Provider store={store}>
{renderRoutes.bind(null, this.history)}
</Provider>
);
}
}
// routes.js
export default function renderRoutes(history) {
// When the route changes, dispatch that information to the store.
history.addChangeListener(() => store.dispatch(routeLocationDidUpdate(location)));
return (
<Router history={history}>
<Route component={myAppView}>
<Route path="/" component={myHomeView} />
</Route>
</Router>
);
};
μ΄λ κ²νλ©΄ κ²½λ‘κ° λ³κ²½ λ λμ μ±μ΄ μ²μλ‘λ λ λλ§λ€ routeLocationDidUpdate()
μμ
μμ±κΈ°κ° μ€νλ©λλ€.
@pburtchaell λΉμ μ λΉμ μ routeLocationDidUpdate
λ₯Ό 곡μ ν μ μμ΅λκΉ?
@gyzerok λ¬Όλ‘ μ λλ€. μ‘μ ν¬λ¦¬μμ΄ν°μ λλ€.
// actions/location.js
export function routeLocationDidUpdate(location) {
return {
type: 'LOCATION_UPDATE',
payload: {
...location,
},
};
}
@pburtchaell κ·Έλμ κ·νμ μμμλ νΉμ κ²½λ‘μ νμν λ°μ΄ν°λ₯Ό μ΄λμμ κ°μ Έ μ€λμ§ μ‘°μ©ν μ΄ν΄νμ§ λͺ»ν©λλ€.
μμ μμ μ μ 체 λ²μ μ λ€μκ³Ό κ°μ΅λλ€.
https://github.com/acdlite/redux-react-router/blob/master/README.md#bonus -reacting-to-state-changes-with-redux-rx
@pburtchaell μ΄ ν΄λΉ μ½λμ λΉλκΈ° λ²μ μ μ¬μ©νμ¬ REST νΈμΆ λ±μμ λ°μ΄ν°λ₯Ό κ°μ Έμ¬ κ²μ΄λΌκ³ κ°μ ν©λλ€. λ΄κ° νμ€νμ§ μμ κ²μ 무μμ λκΉ? κ·Έλ° λ€μ μμ μΌλ‘ μ΄λνλ€κ³ κ°μ νμ§λ§ ν΄λΉ μμ μ
<strong i="7">@connect</strong>
μμΌλ‘, λ§νμ
<Comments />
μ΄λ€ κ²μ΄ μ΄λ―Έ commentStoreμ 'μ°κ²°'(ꡬλ )λμ΄ μμ΅λκΉ? λλ μ΄λ¬ν μμΉ μμ μ commentsStoreμ λ±λ‘νλ©΄λ©λλ€.
λ€μκ³Ό κ°μ URL
/comments/123
νμ μ£Όμ κ΅¬μ± μμμ 'κ²°ν©'λλ―λ‘ μ΄λ»κ² μ¬μ¬μ©ν©λκΉ? μ΄κ²μ΄ λ©μ²ν κ²½μ° μ£μ‘ν©λλ€. μ¬κΈ°μμ λ§€μ° νΌλ μ€λ½μ΅λλ€. λ΄κ° μ°Ύμ μμλ νμ€ν μκ° μμλ€.
λλ λν μ΄κ²κ³Ό μ¨λ¦νλ©΄μ λ΄ μ μ fetchData(dispatch, params)
λ©μλλ₯Ό νΈμΆνλ λ°©λ²μ μμ λ΄κ³ μμ΅λλ€ (μ μ , μλ²κ° μ΄κΈ° λ λλ§ μ μ λΉλκΈ° FETCH μμ
μ μ λ¬νκΈ° μν΄ νΈμΆνκΈ° λλ¬Έμ
λλ€).
컨ν
μ€νΈ λ΄μ dispatch
λν μ°Έμ‘°κ° μ‘΄μ¬νκΈ° λλ¬Έμ fetchData
μ ν΄λΌμ΄μΈνΈ μΈ‘ νΈμΆμ μν΄ μ΄κ²μ μ»λ κ°μ₯ κΉ¨λν λ°©λ²μ λ€μμ νΈμΆνλ Connector
μ μ μ¬ν κ΅¬μ± μμλΌκ³ μκ°ν©λλ€. fetchData
λλ shouldFetchData
λλ select
μ½λ°±μ΄ dispatch
μ ν¨κ» state
dispatch
λν μ°Έμ‘°λ₯Ό κ°μ Έ μμ νμ¬ store
λ° νμμ λ°λΌ FETCH
μμ
μ μ λ¬ν©λλ€.
νμλ λ κ°κ²°νμ§λ§ select
λ μμν ν¨μλ‘ μ μ§λμ΄μΌνλ€λ μ¬μ€μ κΉ¨λ¨λ¦½λλ€. μ μλ₯Ό μ΄ν΄ λ³΄κ² μ΅λλ€.
λ΄ μ루μ
μ λ΄ μ€μ μ λ§κ² μ‘°μ λμμ§λ§ (λΉλκΈ° _FETCH
μμ
μ μ λ¬νλ μ μ fetchData(dispatch, state)
λ©μλ) μ μ ν μμ±μ μ¬μ©νμ¬ μ λ¬ λ λͺ¨λ μ½λ°±μ νΈμΆν©λλ€. https : // gist.github.com/grrowl/6cca2162e468891d8128 β
λ¬Έμλ₯Ό μΆκ°ν΄μΌν©λλ€! "λ°μ λΌμ°ν°μ ν¨κ» μ¬μ©"μΉμ μμ κ°λ₯ν©λλ€.
1.0 λ¦΄λ¦¬μ€ μ΄νμ 곡μμ μΈ λ°©λ²μ΄ μμ΅λλ€.
@gaearonμ λ£κ³ λ°κ°μ΅λλ€.
κ·Έλ° λ€μ νΉμ μν λ³κ²½μ ꡬλ νκΈ° μν΄ κ΄μ°° κ°λ₯ν μ°μ°μλ₯Ό μ¬μ©νλ©΄λ©λλ€.
λ΄ λ§€μ₯μ κ²½λ‘ λ³κ²½κ³Ό λκΈ°ν μνλ‘ μ μ§νκΈ° μν΄ κ΄μ°° κ°λ₯ν μ€νΈλ¦Όμ μ€μ νκ³ λ΄ λ§€μ₯μ μμ²ν μμλ μ€νΈλ¦Ό μ€μ λ μμ΅λλ€. λ΄ μ€ν μ΄μμ κ°μ΄ λ³κ²½ λ λ, νΉν λ΄ μ±μ λ€λ₯Έ κ³³μμ μμμ μ±κ³΅μ μΌλ‘ μ μΆ ν κ²°κ³Ό undefined
μμ μ ν¨ν λ¬Έμμ΄λ‘ λ³κ²½ λ λ μ κ²½λ‘λ‘ μ ννλ λ° κ΄μ¬μ΄ μμ΅λλ€.
λ μ€νΈλ¦Όμ΄ μ€μ λκ³ μλνλ©° μ μ₯μκ° μ
λ°μ΄νΈλκ³ μμ§λ§ Rxλ₯Ό μ²μ μ¬μ©νκ³ κ΄μ°° κ°λ₯ν 쿼리μ λ¬Έμ κ° μμ΅λλ€ ... ν¬μΈν°κ° μμ΅λκΉ? λ΄κ° μ¬λ°λ₯Έ κΈΈμ κ°κ³ μλκ°? distinctUntilChanged
μμ§λ§ νμ¬ μ κ΅μλ₯Ό κ΅½κ³ μμ΅λλ€. μ΄λ€ λμμ μ£Όμ
μ κ°μ¬ν©λλ€. :)
νΈμ§ : μμμ΄! μ£μ‘ν©λλ€. μ μ§λ¬Έμ λ΅νμ΅λλ€. μλμ μμ¬ μ½λ. 무μκ² λ³΄μ΄λ©΄ μλ €μ£ΌμΈμ?
const didChangeProject$ = state$
.distinctUntilChanged(state => state.project._id)
.filter(state => typeof state.project._id !== 'undefined');
# 177μ μ°¬μ±νμ¬ λ§λ¬΄λ¦¬. λΌμ°ν μ λ¬Έμν ν λ μν λ³κ²½μ 리λλ μ , μμ² μ½λ°±μ 리λλ μ λ± λͺ¨λ μλ리μ€λ₯Ό λ€λ£¨μ΄μΌν©λλ€.
λλ μ΄κ²μ΄ λ«νλ€λ κ²μ μκ³ μλ€. κ·Έλ¬λ React 0.14μ λ² ν λ²μ μ λ€μν 1.0 μμ‘΄μ±μΌλ‘ μ΄κ²μ λν μ λ°μ΄νΈκ° μκ³ κ·Έλ μ§ μλ€λ©΄ React 0.14, react-router, redux λ±μ μλ‘μ΄ κΈ°λ₯μ λν νν 리μΌμ΄ λ μ μμ΅λλ€. μ΄? μ΄ λͺ¨λ κ²μ λμμ λ°°μ°κ³ μ΄ν΄νλ©΄μ λ€κ°μ€λ λ³κ²½ μ¬νμ λν μ΅μ μ 보λ₯Ό μ μ§νλ €λ λ§μ μ¬λλ€μ΄μλ κ² κ°μ΅λλ€. λλ μν©μ΄ μ λμ μ΄λΌλ κ²μ μκ³ μμ§λ§ (λ§μ₯λ .. μ΄ .. μλνμ§ μμ) λ€λ₯Έ μμ μμ μλ‘ μ μ΄μΈλ¦¬μ§ μλ μ‘°κ°μλ³΄κ³ μλ κ² κ°μ΅λλ€. κ·Έλ¦¬κ³ λ©°μΉ νμλ μ λ°μ΄νΈ λ μ±μ μλμν¬ μ μμ΅λλ€. λΌμ°ν . μ΄ λͺ¨λ κ²μ΄ μ΄λ»κ² μλνλμ§ μ΄ν΄νλ λ° μ¬μ ν μ΄λ €μμ κ²ͺκ³ μκΈ° λλ¬Έμ λ΄ μλͺ» μΌ κ°λ₯μ±μ΄ λμΌλ©° μ΅μ νλͺ©μΌλ‘ μ λ°μ΄νΈ λ νν 리μΌμ΄ 곧 λμ¬ κ²μΌλ‘ κΈ°λν©λλ€.
νν 리μΌμ΄μμ λκΉμ§ λΌμ°ν
μ΄μλ examples/real-world
λ₯Ό μμ λ‘κ² μ΄ν΄λ³΄μμμ€. μ§κΈμ "μ΅μ λ° μ΅κ³ "λ μλμ§λ§ μ μλν©λλ€.
κ°μ₯ μ μ©ν λκΈ
@deowk μ΄ λ¬Έμ μλ λ λΆλΆμ΄ μμ΅λλ€. 첫 λ²μ§Έλ
componentWillReceiveProps()
μ μν λ³κ²½μ μλ΅νλ λ° μ΄μμ μΈ λ°©λ²μ΄ μλλΌλ κ²μ λλ€. λλΆλΆ Reduxμμ νλ κ²μ²λΌ μ μΌλ‘ μκ° λͺ λ Ή μ μΌλ‘ μκ°ν΄μΌνκΈ° λλ¬Έμ λλ€. ν΄κ²°μ± μ νμ¬ λΌμ°ν° μ 보 (μμΉ, λ§€κ° λ³μ, 쿼리)λ₯Ό _inside_ μ μ₯μμ μ μ₯νλ κ²μ λλ€. κ·Έλ¬λ©΄ λͺ¨λ μνκ° λμΌν μμΉμ μκ³ λλ¨Έμ§ λ°μ΄ν°μ λμΌν Redux APIλ₯Ό μ¬μ©νμ¬ κ΅¬λ ν μ μμ΅λλ€.νΈλ¦μ λΌμ°ν° μμΉκ° λ³κ²½ λ λλ§λ€ μ€νλλ μμ μ νμ λ§λλ κ²μ λλ€. μ΄κ²μ 곧 μΆμ λ React Router 1.0 λ²μ μμ μ½μ΅λλ€.
μ΄μ μμ μνλ νμ λΌμ°ν° μνμ λκΈ°νλ©λλ€. κ·Έλ¬λ©΄ μμ κ΅¬μ± μμμμ 쿼리 λ§€κ° λ³μ λ³κ²½ λ°
setState()
μ μλμΌλ‘ λ°μ ν νμκ° μμ΅λλ€. Reduxμ 컀λ₯ν°λ₯Ό μ¬μ©νκΈ° λ§νλ©΄λ©λλ€.λ¬Έμ μ λ λ²μ§Έ λΆλΆμ κ²½λ‘ λ³κ²½μ λν μλ΅μΌλ‘ μμ μ μ€ννλ κ²κ³Ό κ°μ΄ λ·° λ μ΄μ΄ μΈλΆμ Redux μν λ³κ²½μ λμνλ λ°©λ²μ΄ νμνλ€λ κ²μ λλ€. μνλ κ²½μ° μ€λͺ νλ κ²κ³Ό κ°μ κ°λ¨ν κ²½μ°μ componentWillReceivePropsλ₯Ό κ³μ μ¬μ©ν μ μμ΅λλ€.
νμ§λ§ λ 볡μ‘ν κ²½μ°λΌλ©΄ RxJSλ₯Ό μ¬μ©νλ κ²μ΄ μ’μ΅λλ€. μ΄κ²μ΄ λ°λ‘ μ΅μ λ² λΈμ΄ μ€κ³λ λ°μ λ°μ΄ν° νλ¦μ λλ€.
Reduxμμμ΄λ₯Ό μννλ €λ©΄ λ¨Όμ κ΄μ°° κ°λ₯ν μ€ν μ΄ μν μνμ€λ₯Ό μμ±ν©λλ€. redux-rxμ
observableFromStore()
μ¬μ©νμ¬μ΄λ₯Ό μν ν μ μμ΅λλ€.κ·Έλ° λ€μ νΉμ μν λ³κ²½μ ꡬλ νκΈ° μν΄ κ΄μ°° κ°λ₯ν μ°μ°μλ₯Ό μ¬μ©νλ©΄λ©λλ€. λ€μμ μ±κ³΅μ μΈ λ‘κ·ΈμΈ ν λ‘κ·ΈμΈ νμ΄μ§μμ 리λλ μ νλ μμ λλ€.
μ΄ κ΅¬νμ
componentDidReceiveProps()
μ κ°μ λͺ λ Ήν ν¨ν΄μ μ¬μ©νλ λμΌν κΈ°λ₯λ³΄λ€ ν¨μ¬ κ°λ¨ν©λλ€.λμμ΄ λμκΈ°λ₯Ό λ°λλλ€.