我有一个功能性的父级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
答案 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)