开发者问题收集

将 props 传递到 React 组件

2018-09-25
1952

我刚刚开始学习 React,正在创建组件并将 props 传递给它们。

我是否必须在以下示例中的 JSX 元素中引用 props(我见过引用 props 和不引用 props 的示例,两种方法似乎都可以):

const name = 'Jonny'

function Name (props) {
  return (
    <h1>Name: {props.name}</h1>
  )
}

ReactDOM.render(
  <Name name={name} />,
  document.getElementById('app')
)

如果我以完全相同的方式运行代码,只删除此行中的 props 引用,它似乎也能正常工作:

h1>Name: {name}</h1>

我的问题是,此时的 props 引用是否必须在那里,如果不是,为什么有时会放在那里?

3个回答

这是因为,您已经全局定义了 name 变量,并通过相同的键 name 传递了 props 中的名称值。

所以在这种情况下: <h1> {name}</h1> ,它采用全局定义的名称值,而在 <h1>{props.name}</h1> 的情况下,它将采用在 props 中传递的值而不是全局值。

现在,如果您想查看差异,请使用其他键传递 props 中的名称值,例如:

<Name nameValue={name} />

并使用 <h1> {props.name} </h1> 渲染它,您将看不到任何内容,因为 name 键不存在 props 对象中。

但是如果您使用 {props.nameValue> ,您将看到正确的值。

Mayank Shukla
2018-09-25

由于全局变量与使用它的组件位于同一文件中,因此它既可以通过 props 工作,也可以不使用 props 工作。

简而言之,如果您将值作为 prop 传递给组件,则需要从 props 中访问该值

就您而言

<Name name={name} />

name 传递了一个 prop,因此像 props.name 那样访问它是正确的做法,因为可能发生的情况是 Name 组件也是从其他地方呈现的,并且那里的名称变量可能没有定义为全局变量。

Shubham Khatri
2018-09-25

<h1>Name: {name}</h1> 之所以有效,是因为您有一个 const name = 'Jonny' 。当需要另一个组件将 name 的值传递给下一个组件时,将使用 props.name 。例如以下代码:

...
render(){
return (<DisplayName name='Johnny' />)
}

DisplayName 组件,您需要通过 props.name 访问 name ,如下所示:

render(){
  return() => (
    <h1>{this.props.name}</h1>
    )
  }

或:

DisplayName = ({name}) => ( // destructing name from the props received
<h1>{name}</h1>
)
Daniel Adepoju
2018-09-25