首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将“导航”和“道具”传递给子组件

问将“导航”和“道具”传递给子组件
EN

Stack Overflow用户
提问于 2020-12-16 15:53:22
回答 2查看 353关注 0票数 0

通常,使用导航,您会收到像这样的子组件上的道具,其中有花括号:

代码语言:javascript
复制
const MatchHistoryScreen = ({ navigation, route }) => {

但我相信没有花括号的道具是这样的:

代码语言:javascript
复制
const MatchToggleComponent = (props) => {

那么,如何将子组件的“导航”和“道具”结合起来呢?在花括号里放“道具”对我没用。我认为这方面的一个潜在的用例是,如果您要将来自App.js的道具与导航支柱一起传递下去。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-12-18 10:06:08

因此,props对象是组件从React中接收到的,这取决于您如何配置应用程序。如果您有Redux,那么您将收到一些道具从那里。如果组件是子组件,并且您要从父组件传递一些属性,那么您也将收到父亲的道具。如果父程序正在传递导航,那么您将在您的孩子中使用它作为道具。

props只是一个组件从多个源接收的对象。它实际上可以被称为任何东西,banana或sporp,这只是一个调用对象props的惯例。

另一方面,解构用于将对象(或数组中的值)的属性“解压缩”到单独的变量中。因此,当您解压导航属性时,您实际上是从

代码语言:javascript
复制
const MatchToggleComponent = (props) => {
// props object contains navigation and route properties, which can be accessed as props.navigation and props.route

转到

代码语言:javascript
复制
const MatchToggleComponent = ({ navigation, route }) => {
    // you unpack navigation and route properties into separate variables `navigation` and `route`, ready to be used in your component.

假设MatchToggleComponent的父级看起来像

代码语言:javascript
复制
return (
  <>
    <MatchToggleComponent
      foo={bar}
      one={two}
    />
  </>
)

因此,您的props对象将具有foo属性、one属性、然后是navigation属性和route属性。有效地解构--让我们选择您感兴趣的属性,并“解压”它们,随时准备在组件中使用,而不需要一直引用props对象。

所以如果你想要使用foo道具和导航道具,你可以

代码语言:javascript
复制
const MatchToggleComponent = ({ foo, navigation, route }) => {

你可以在任何组件中这样做,只要尝试一下就行了。

如果您有任何其他问题,请不要犹豫,继续讨论:)

编辑1:

req.query似乎是一个具有属性userId和activeMethods的对象。在对对象进行结构分解时,应该使用大括号。因此,在构造数组时,应该使用方括号[]。您构造的变量名应该与对象中的名称相同。例如:

代码语言:javascript
复制
const foo = {
  some: ...,
  other: ...,
  last: ...,
};

如果您执行const { bar } = foo,那么JS将不会知道您希望获得对象的第一个支柱,这将引发一个错误。因此,您创建的变量应该与对象中的支柱名称相匹配,如

代码语言:javascript
复制
const { last, other } = foo;

正如您所看到的,顺序并不重要(数组的情况有点不同,但我不会在这里讨论这个问题)。

您可以做的是,您可以重命名变量,同时从对象中破坏属性。假设您想从last对象获得foo道具,但出于某种原因,您希望它名为first。那你就会做

代码语言:javascript
复制
const { last: first } = foo;

这将有效地为您解压last对象中的foo支柱,并将其重命名为第一个,这样您就能够在代码中使用const first。

票数 2
EN

Stack Overflow用户

发布于 2020-12-16 16:10:18

您可以使用useNavigation钩子来完成这一任务,该钩子允许访问导航对象。

示例:

​

代码语言:javascript
复制
import { useNavigation } from '@react-navigation/native';

function MyBackButton() {
  const navigation = useNavigation();

  return (
    <Button
      title="Back"
      onPress={() => {
        navigation.goBack();
      }}
    />
  );
}

​

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65326697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档