将点击数据从 child 组件传递到 React.JS 中的另一个 child 组件

Passing data onClick from child component to another child component in React.JS

我正在尝试在另一个 child 组件中呈现选定的 li(映射在 child 组件中)。 所以你有以下结构(非常简单):


Parent 组件 (Parent.JS)


我在这里尝试做和理解的练习是如何使用 props 在 children 之间传递数据(如果值超过 parent)。

Parent.JS

import React, { useState } from 'react'
import Child from './Child'
import Title from './Menu'


function Parent() {
    const [word, setWord] = useState('Parent');

    return (
        <div>
            <Title />
            <Menu changeWord={word => setWord(word)}/>
        </div>
    )
}

export default Parent

Title.JS

import React from 'react'

function Title(props) {
    return (
        <div>
           //Here I tell the code to print "Nothing selected" 
           //until I don't choose a link in the menu. 
           {props.title ? <h1>{props.title}</h1> : <h1>Nothing selected</h1>}
        </div>
    )
}

export default Title

Menu.JS

import React from 'react'

const data = [
    {title: "Home"},
    {title: "About"},
    {title: "Contact"},
]

function Menu(props) {
    return (
        <div>
            {data.map((item) => {
                return <li onClick={() => props.changeWord(props.children)}>{item.title}</li>
            })}
        </div>
    )
}

export default Menu

当然是App,JS简化了

import Parent from './Parent'

function App() {
  return (
    <div>
      <Parent />
    </div>
  );
}

export default App;

我很亲近..

当你调用 changeWord 时你想传递你正在映射的 item 而不是 props.children

所以你的 Menu 应该是这样的

import React from 'react';

const data = [{ title: 'Home' }, { title: 'About' }, { title: 'Contact' }];

function Menu(props) {
  return (
    <div>
      {data.map((item) => {
        return <li onClick={() => props.changeWord(item)}>{item.title}</li>;
      })}
    </div>
  );
}
export default Menu

您的 Parent 应该像这样将 word.title 状态值传递给 Title

import React, { useState } from 'react'
import Child from './Child'
import Title from './Menu'


function Parent() {
    const [word, setWord] = useState('Parent');

    return (
        <div>
            <Title title={word.title}/>
            <Menu changeWord={word => setWord(word)}/>
        </div>
    )
}

export default Parent

注意:您应该删除 'Parent' 的初始状态值,因为 word 现在是一个对象,您在尝试访问 word.title.[=22= 时可能会出错]