![](/img/trans.png)
[英]How to test the handlers in withHandlers, branch and withState of recompose with enzyme?
[英]recompose withState how to update on props changes
我有一個嘗試修改的高階組件(我不熟悉重組)。
這就是我的組件:
<Map mycenter={mycenter} />
如果mycenter已更新,我希望地圖組件更新或重新渲染。 我正在嘗試從https://github.com/istarkov/google-map-thousands-markers/blob/master/src/Map.js修改代碼
我對代碼做了一些修改。 首先,將地圖中心設置為mycenter。 這樣可行。
withState('mapParams', 'setMapParams', ({ mycenter }) => ({ center:mycenter, zoom: 12 })),
之后,用戶可以單擊某處,中心將被修改
withHandlers({
onMapParamsChange: ({ setMapParams }) => ({ center, zoom, bounds }) => {
setMapParams({ center, zoom, bounds });
console.log('setMapParams', { center, zoom });
},
如果更新了“ mycenter”,是否有辦法重新發布組件或更新中心?
當前,最好的方法是使用生命周期。 初始狀態( ({ mycenter }) => ({ center:mycenter, zoom: 12 })
的回調僅發生一次。
const enhanceMap = compose(
withState('mapParams', 'setMapParams', ({ mycenter }) => ({ center: mycenter, zoom: 12 })),
withStateHandlers({...}),
lifecycle({
componentWillUpdate(nextProps) {
if (this.props.mycenter !== nextProps.mycenter)
this.setState({mapParams: { center: nextProps.mycenter, zoom: 12 }})
}
})
)
希望這不會太晚。
我發現變換道具的狀態有點混亂。
現在,recompose允許您將函數作為withProps方法的參數發送。 您可以執行以下操作:
withProps( props => ({
mycenter: props.mycenter,
zoom: 12,
}))
這樣,您可以將道具傳播到組件,並且只要道具發生更改,它就會更新。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.