【问题标题】:How a child component can get several props/data from two separate parent components子组件如何从两个独立的父组件获取多个道具/数据
【发布时间】:2021-09-19 07:49:18
【问题描述】:

在一个组件中,为什么我不能从不同的组件接收两个/多个道具?

我收到此错误:

TypeError: props.name 不是函数。

我做错了什么?

这是我尝试的方法-

function Welcome() {
  const [searchString, setString] = useState('');
  return (
    <div className='App'>
      <Header name={searchString} />
    </div>
  );
}

function Home() {
const [numbers,setNumbers] =  useState('');
retrun(
<Header moneyAmount={numbers} />
)
}

function Header(props) {
return(
<div>
{props.name}
{props.moneyAmount}
</div>
)
}

所有人都尝试这种方式或function Header({name, moneyAmount}){} 字段。

createContextuseContext 有办法吗?
我尝试使用useContext,但我认为它与props 发生冲突,仍然报错。

【问题讨论】:

  • 你正在创建两个独立的 React 元素。一个只有name 属性,另一个只有moneyAmount 属性。我不确定我是否理解您的问题,但 React Context (reactjs.org/docs/context.html) 也可能会有所帮助。如果您的 Home 组件在 App 内部(反之亦然),您可以将 prop 从 App 传递给 Home 并将其传递给 Header
  • 它仍然给createContext 一个错误可能它与道具碰撞Header 正在获取,我不明白为什么。

标签: reactjs components parameter-passing react-props


【解决方案1】:

你有 3 个组件:Welcome、Home 和 Header

Welcome 正在使用 Header 组件并向其传递一个 name 属性,因此它只会呈现您传递的名称(您提供了错误的变量,应该是 name={searchString} 而不是 name={setString})。

Home 也使用了 Header 组件并传递了一个 moneyAmount 属性, 所以它只会渲染 moneyAmount 变量。

Welcome 和 Home 没有关系,因此它们中的 Header 组件不知道从另一个传递的 props。如果你想传递多个变量,你必须像这样直接传递给组件:

function Home(props) {
  const [numbers,setNumbers] =  useState('');
  return (
    <Header moneyAmount={numbers} name={prop.searchString} />
  )
}

如果你想将数据从 2 个不同的组件传递给一个子组件,你可以这样做:

function Welcome() {
  const [searchString, setString] = useState('');
  return (
    <div className='App'>
      <Home name={searchString} />
    </div>
  );
}

function Home(props) {
  const [numbers,setNumbers] =  useState('');
  return (
    <Header moneyAmount={numbers} name={props.name} />
  )
}

function Header(props) {
  return(
    <div>
      {props.name}
      {props.moneyAmount}
    </div>
  )
}

【讨论】:

  • 嗨,Gabriel,但是有没有办法从两个父母那里传递一个孩子 data?一定有什么。
  • @Ileh 我用代码编辑了答案,如果您认为我的回答对您有帮助,请将其标记为已接受
猜你喜欢
  • 2020-03-31
  • 2019-08-30
  • 2015-08-29
  • 1970-01-01
  • 2018-08-11
  • 2018-06-24
  • 2020-03-26
  • 1970-01-01
  • 2021-04-14
相关资源
最近更新 更多