Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ReactJS-将数据传输到子组件并从组件单击中获取数据_Javascript_Reactjs - Fatal编程技术网

Javascript ReactJS-将数据传输到子组件并从组件单击中获取数据

Javascript ReactJS-将数据传输到子组件并从组件单击中获取数据,javascript,reactjs,Javascript,Reactjs,我有一个父组件,它将渲染面包屑。代码如下: <Breadcrumbs urlPath={this.state.urlPath} /> <Breadcrumbs aria-label="breadcrumb"> {urlArr.map((url, index) => <Link key={index} color="inherit" href="/" > { url }

我有一个父组件,它将渲染面包屑。代码如下:

<Breadcrumbs urlPath={this.state.urlPath} />
   <Breadcrumbs aria-label="breadcrumb">
        {urlArr.map((url, index) => 
            <Link key={index} color="inherit" href="/" >
                { url }
            </Link>
        )}
        <Typography color="textPrimary">{selected}</Typography>
   </Breadcrumbs>

面包屑和面包屑呈现如下:

<Breadcrumbs urlPath={this.state.urlPath} />
   <Breadcrumbs aria-label="breadcrumb">
        {urlArr.map((url, index) => 
            <Link key={index} color="inherit" href="/" >
                { url }
            </Link>
        )}
        <Typography color="textPrimary">{selected}</Typography>
   </Breadcrumbs>

{urlArr.map((url,索引)=>
{url}
)}
{选定的}
我希望breadcrumbs中的click-on-link事件将{url}发送回父组件


有办法吗?谢谢大家

是的。您可以将函数作为prop传递给breadcrumb组件,如下所示

Parent.jsx:

onBreadcrumbSelect(url) {
    console.log(url);
}

render() {
    return (
        ... other components ...
        <Breadcrumbs urlPath={this.state.urlPath} onLinkSelect={this.onBreadcrumbSelect.bind(this)} />
    )
onBreadcrumbSelect(url){
console.log(url);
}
render(){
返回(
…其他组件。。。
)
Breadcrumb.jsx

   <Breadcrumbs aria-label="breadcrumb">
        {urlArr.map((url, index) => 
            <Link key={index} color="inherit" href="/" onClick={() => this.props.onLinkSelect(url)} >
                { url }
            </Link>
        )}
        <Typography color="textPrimary">{selected}</Typography>
   </Breadcrumbs>

{urlArr.map((url,索引)=>
this.props.onLinkSelect(url)}>
{url}
)}
{选定的}

这将把绑定函数从父级传递到breadcrumb。但是,当您在breadcrumb中调用此函数时,它将从父组件调用绑定函数

在父组件上,将此函数和
onLinkClick
参数添加到子组件:

void handleLinkClick(string url){
   /* Do your logic */
}
...
<Breadcrumbs urlPath={this.state.urlPath} onLinkClick={handleLinkClick} />
 <Link key={index} color="inherit" href="/" onClick={() => handleLinkClick(url)} >
         { url }
 </Link>
void handleLinkClick(字符串url){
/*做你的逻辑*/
}
...
然后调整子组件:

void handleLinkClick(string url){
   /* Do your logic */
}
...
<Breadcrumbs urlPath={this.state.urlPath} onLinkClick={handleLinkClick} />
 <Link key={index} color="inherit" href="/" onClick={() => handleLinkClick(url)} >
         { url }
 </Link>
handleLinkClick(url)}>
{url}

这就是您正在尝试的吗?

第二个代码在面包屑组件(子组件)中。“urlArr”变量是什么?它是剪切后的urlPath:var urlArr=this.props.urlPath.split(“/”);