React 16.8钩子-更新父状态后子组件不会重新渲染

时间:2019-02-11 15:34:26

标签: reactjs state mapbox-gl-js

我有一个功能性的父级asyncData: ({ params }) -> axios.defaults.baseURL = 'https://api.github.com/repos/username' repo = 'repo22' res = await axios('/' + repo) { stargazers: res.data.stargazers_count description: res.data.description url: res.data.html_url } ... h1 {{description}} 组件,其中有几个状态,其中一个是Map,其值最初是从配置中设置的。

然后我有一个子layers组件,该组件将地图的图层状态作为其道具。 LayerControl组件进行一些更改,然后使用LayerControl将其传递回Map,然后随后调用图层(onLayerChange)的setState方法。

据我了解,这应该触发我的LayerControl组件的重新渲染,但事实并非如此。我做错了什么?

setLayers

1 个答案:

答案 0 :(得分:1)

您是要在LayerController中创建一个新的Layers数组,还是只是将一个项目添加/删除到Layers数组中?我假设setLayers仅做一个浅表引用检查以查看layers是否已更改,如果您修改了数组而不是重新创建数组,则返回false。因此,您的组件将不会重新渲染。

例如

// In LayerController

// this mutates the array, but won't trigger a render
layers.push(/* some new layer */);
onLayerChange(layers);

// creates a new array, which should trigger a render
const newLayer = {/* your new layer */};
const newLayers = [...layers, newLayer];
onLayerChange(newLayers)