我目前正在与react-simple-maps一起玩,以显示包含国家/地区的世界地图。
我尝试执行以下情形:
selectCountry(country)
动作并使用所选国家/地区更新redux商店所有redux东西都起作用,因为状态已更新,并且我在country
道具中选择了国家。
我的问题是,即使我使用以下代码,<Geography>
组件也不会重新呈现并且没有用绿色填充:
style={{ default: {fill: country.NAME === geography.properties.NAME ? 'green' : 'blue' }}}
如何重新渲染Geography
组件(只是所选的国家/地区)以将其填充为绿色?我是否被迫使用forceUpdate?
这是我的文件:
Worldmap.jsx
import topoWorldMap from '../../data/world-110m.json';
const Worldmap = ({ country, selectCountry }) => {
return (
<div>
<ComposableMap
projectionConfig={{
scale: 205,
rotation: [-11, 0, 0]
}}
width={980}
height={551}
>
<ZoomableGroup center={[0, 20]} disablePanning>
<Geographies geography={topoWorldMap}>
{(geographies, projection) =>
geographies.map(geography => (
<Geography
onClick={() => selectCountry(geography.properties)}
key={geography.properties.NAME}
geography={geography}
projection={projection}
style={{
default: {
fill: country.NAME === geography.properties.NAME ? 'green' : 'blue'
}
}}
/>
))
}
</Geographies>
</ZoomableGroup>
</ComposableMap>
</div>
);
};
Worldmap.defaultProps = {
country: {}
};
Worldmap.propTypes = {
country: PropTypes.objectOf(PropTypes.any),
selectCountry: PropTypes.func.isRequired
};
先谢谢了
答案 0 :(得分:2)
我在我的国家/地区道具中选择了国家/地区
React的工作方式是,当道具更改时,组件将重新渲染。因此,如果为真,则实际上是重新渲染了组件。
所以也许:
<span>{country.toString()}</span>
来调试它),然后确保正确使用带有connect(mapStateToProps)
的react-redux 欢呼
答案 1 :(得分:1)
如果国家/地区更改,则组件将重新呈现。仔细检查您是否正确通过了国家/地区(即,请确保该值已更改,否则它将不会重新呈现)
检查您的减速器以确保它是
由于状态是不可变的; Reducer产生的状态是当前状态的副本加上新数据