reactjs - react native - 如何将参数从一个组件传递到另一个组件?
问题描述
我有 2 个屏幕,一个带有图像选择器和上传功能,另一个带有地图和标记,
我的目标是添加带有照片的标记,并将该照片参考放在我在 firebase 中的标记集合中。
到目前为止,我设法把标记 latlng,
我在地图屏幕内使用模式:在模式内我调用图像选择器,一旦我上传照片并使用:
//inside UploadScreen ~~~
const urlRef = storage()
.ref(filename)
.getDownloadURL();
console.log('url: ', urlRef)
我需要那个 urlRef 在我的其他屏幕模式上。
<Modal
isVisible
transparent
onBackButtonPress={() => this.setState({ activeModal: null })}
onBackdropPress={() => this.setState({ activeModal: null })}
>
<View style={styles.modalView}>
<UploadScreen />
<TouchableOpacity onPress={()=>this.setState({activeModal: null})}>
<Text> Close</Text>
</TouchableOpacity>
<TouchableOpacity onPress={() =>this._addMarker()}> //this adds the marker latlng
<Text>add marker</Text>
</TouchableOpacity>
</View>
</Modal>
在我的地图屏幕上,我调用<UploadImage/>
以加载该上传图像组件,上传完成后,我得到了需要放入我的地图屏幕中的标记集合中的 urlRef。
_addMarker() {
console.log('marker cords?: ', this.state.marker)
console.log('marker cords?: ', this.state.marker.longitude)
markerRef.add({
longitude: this.state.marker.longitude,
latitude: this.state.marker.latitude,
email: this.state.userEmail,
imageUri: "will be image uri"
})
}
请给我一些方向,我不确定那里是否需要道具或其他东西。
欢迎任何建议或帮助。
提前致谢
解决方案
通常,React 中的通信流程是自上而下的。这意味着父母将一些道具传递给孩子,然后孩子反过来用这些道具做一些事情。
但是,显然可以按照您想要的方式进行操作。为此,最简单的方法是useState
在您的模式中使用创建一个状态。然后,您将 setter 传递给子项,当子项中的值被填充时,您将其传递回父项。
在代码中它看起来像这样:
Modal.js (parent)
const [childUrlRef, setChildUrlRef] = useState(null);
<Modal
isVisible
transparent
onBackButtonPress={() => this.setState({ activeModal: null })}
onBackdropPress={() => this.setState({ activeModal: null })}
>
<View style={styles.modalView}>
<UploadScreen setChildUrlRef={setChildUrlRef} />
...
</Modal>
UploadScreen (child)
当你在孩子中获得你的价值时,将它设置为状态,以确保 React 看到它,然后将它传递给你的父母。
const [url, setUrl] = useState(null);
useEffect(() => {
if (url) props.setChildUrlRef(url);
}, [url])
...
const urlRef = storage()
.ref(filename)
.getDownloadURL();
console.log('url: ', urlRef)
setUrl(urlRef);
...
因此,您获取变量,将其设置为本地状态,然后让 useEffect 监视该变量中的更改,一旦检测到更改,就会触发 useEffect 并通过 state setter 通过 props 设置父级内部的值.
如果您需要在没有直接关系的组件之间传递数据,请考虑使用Redux
or React Context
。
编辑:我刚刚看到您的 Modal 不起作用。如果你不能重构它,你仍然可以将一个函数传递给孩子,这会setState
在你的父母内部触发。
推荐阅读
- php - Apache Server 未使用 PHP 脚本返回 HTTP 错误代码
- python - 读取 Excel 分段数据,转换,然后输出为数据库的原始格式
- reactjs - React.JS 处理未定义道具的最佳方法是什么
- javascript - 如何访问此 PHP 对象中的信息?
- perl - Perl 正确读取逗号分隔值的配置值
- php - Wordpress - 为前 4 个帖子设置自定义 CSS 类,并包装 2 个第一个帖子
- c++ - 在qt中执行自己的sql函数
- symfony - (Symfony 4)期望存储库类的函数,当我将其设置为期望实体类时
- java - 如何使用 ObjectMapper 序列化/反序列化 LogEvent 对象?
- c# - 反序列化平面json c#