【发布时间】:2020-01-01 07:17:47
【问题描述】:
size.value 状态是当_updateData 函数触发<select> 的onChange 时的一个选项。例如,假设<select>的起始defaultValue选项为“All”,locations为空...选项更改为“Medium”,locations为“All”...选项更改为“大”,locations 是“中”......等等。最初,我希望_updateData 函数在选择“全部”的情况下运行 onload,这也不起作用,它会引发错误无法读取setSize({value: event.target.value}) 上未定义的属性“目标”。我在这里做错了什么?谢谢您的帮助。
const Map = () => {
const [viewport, setViewport] = useState({longitude: -98.58, latitude: 39.83, zoom: 3.5})
const [locations, setLocations] = useState([])
const [geojson, setGeojson] = useState(null)
const [size, setSize] = useState({value: "All"})
useEffect(() => {
setLocations(geodata)
_updateData()
}, []);
const _updateViewport = viewport => {
setViewport(viewport)
}
const _updateData = event => {
setSize({value: event.target.value})
const tempLocations = [];
locations.forEach(function(res) {
if (size.value === "All") {
tempLocations.push(res);
} else if (res.Size === size.value) {
tempLocations.push(res);
}
});
var data = {
...
};
setGeojson(data);
}
return (
<ReactMapGL
{...viewport}
onViewportChange={_updateViewport}
width="100%"
height="100%"
mapStyle={mapStyle}
mapboxApiAccessToken={TOKEN}>
<Source id="my-data" type="geojson" data={geojson}>
<Layer {...icon} />
</Source>
<div style={navStyle}>
<NavigationControl onViewportChange={_updateViewport} />
<select onChange={_updateData} defaultValue={size}>
<option value="All">All</option>
<option value="Large">Large</option>
<option value="Medium">Medium</option>
<option value="Small">Small</option>
<option value="Very Small">Very Small</option>
</select>
</div>
</ReactMapGL>
);
}
export default Map;
【问题讨论】:
标签: reactjs react-hooks react-state react-map-gl