React Native 中的条件渲染问题
Posted
技术标签:
【中文标题】React Native 中的条件渲染问题【英文标题】:Problem with conditional rendering in React Native 【发布时间】:2021-08-21 20:27:15 【问题描述】:我有一张地图,我希望在用户长按某个点时出现一个标记。 我有以下代码:
const [coords, setcoords] = React.useState(getcoord());
const [show, setShow] = React.useState(false);
const setPointCoords = (e) =>
setcoords(e.geometry.coordinates);
setShow(!show);
return (
<View style=style.page>
<MapboxGL.MapView
style=style.map
rotateEnabled=false
styleURL="mapbox://styles/daskalgg/ckp26fbmb34iv18otkav9sj4s"
onLongPress=(e) =>
setPointCoords(e);
>
show &&
<MapboxGL.PointAnnotation
key="marker"
id="point"
draggable=true
coordinate=coords />
</MapboxGL.MapView>
show &&
<Text>test</Text>
</View>
);
我遇到的问题是,尽管调用了 setPointCoords 并且 show 的值发生了变化,但标记从未出现。
我注意到的一些事情:
-
用于测试目的的 Text 元素按预期工作。
当 show 的初始值为 true 时问题就消失了。
【问题讨论】:
【参考方案1】:试试这个
show ? (
<MapboxGL.PointAnnotation
key="marker"
id="point"
draggable=true
coordinate=coords
/> )
: null
【讨论】:
感谢您的回答。不幸的是,它也不起作用。 抱歉,问题是因为 MapboxGL.PointAnnotation 似乎不能很好地处理有条件地渲染子组件。通过您发布的答案意识到这一点。【参考方案2】:我找到了一个解决方案,但它很老套
<MapboxGL.PointAnnotation
key="marker"
id="point"
draggable=true
onSelected=(e) =>
console.log(e);
coordinate=coords >
<View
key="marker"
style=
borderColor: "black", backgroundColor: "red",
display: show ? 'flex' : 'none'
>
<Text> This is a Marker </Text>
</View>
</MapboxGL.PointAnnotation>
由于我无法控制 PointAnnotation 本身的样式,所以我显示一个视图并通过“显示”控制它的可见性。我不接受它作为正确答案,但希望有更好的答案。
【讨论】:
以上是关于React Native 中的条件渲染问题的主要内容,如果未能解决你的问题,请参考以下文章
React Native Redux App 中的条件渲染失败
如何使用渲染操作在 React-native-Gifted-chat 中发送图像/视频和语音消息?
react-native-video 的 react-native-orientation 的反应原生布尔条件