javascript - 如何将函数传递给 react 中的另一个组件

标签 javascript reactjs

我是 React 新手,所以我有以下组件:

App组件这个组件有一个叫performSearch的函数,它还渲染了一个Header组件

//this function will create the search feature
  performSearch = (text = 'dogs') => { //include text parameter from flickr api on url, and provide a default value for text parameter to display dog pics when the page first loads
     //fetch data from flickr
     axios
     .get(
       `https://api.flickr.com/services/rest/?method=flickr.photos.search&api_key=${apiKey}&text=${text}&per_page=24&format=json&nojsoncallback=1`
     )
     .then(response => {
       this.setState({
         pics: response.data.photos.photo
       });
     })
     .catch(error => {
       console.log("Something went wrong, could not access data", error);
     });
  };


  render() {
    //console.log(this.state.pics);
    return (
      //JSX inside ()
      <BrowserRouter>
        <div>
          <Header  //Render Header Component
          />

          <GalleryItem data={this.state.pics} />
          {/*pass data array to GalleryItem component */}
        </div>
      </BrowserRouter>
    );
  }
} //closes App

这是 Header 组件,我想做的是为 Header 内的 Nav 组件提供来自 App 组件的 performSearch 函数,如下所示 <Nav onSearch={this.performSearch }/> {/*Render Nav menu and pass performSearch function */}我试图将该功能传递给位于 Header 中的 Nav,但它不起作用,有人可以帮忙吗?

/* import react*/
import React from "react";

//import modules
import Form from "./Form";
import Nav from "./Nav";
import Gallery from "./Gallery";
// import Galleryitem from './Galleryitem'

/*Create a Header component that could store things 
like an app title, logo, nav and search bar.
 */
const Header = () => {
  return (
    //JSX inside ()
    <header>
      <Form /> {/*render the search bar*/}
       <Nav /> {/*Render Nav menu */}
      <Gallery /> {/*Render Gallery component  */}
    </header>
  );
};

/*Now export Header component so that we are able to import it 
  and use it within other components or modules of our app*/
export default Header;

最佳答案

问题是您正在使用 this.performSearch 就好像这样的函数是在 Nav 组件中定义的,但事实并非如此。您要App 中的performSearch 函数传递给Nav:

应用组件

render() {
    //console.log(this.state.pics);
    return (
        //JSX inside ()
        <BrowserRouter>
            <div>
                {/* Pass the function as a prop down to Header */}
                <Header onSearch={this.performSearch}/>

                <GalleryItem data={this.state.pics} />
                {/*pass data array to GalleryItem component */}
            </div>
        </BrowserRouter>
    );
}

标题组件

// Accept component properties as first parameter
const Header = (props) => {
    return (
        //JSX inside ()
        <header>
            <Form /> {/*render the search bar*/}
                <Nav onSearch={props.onSearch}/> {/*Render Nav menu */}
            <Gallery /> {/*Render Gallery component  */}
        </header>
    );
};

请注意,您需要将 props 定义为功能性 Header 组件的参数,以便访问 performSearch

您还可以使用对象解构 语法直接访问该函数:

Header 组件(使用对象解构)

// Accept component properties as first parameter
const Header = ({ onSearch }) => {
    return (
        //JSX inside ()
        <header>
            <Form /> {/*render the search bar*/}
                <Nav onSearch={onSearch}/> {/*Render Nav menu */}
            <Gallery /> {/*Render Gallery component  */}
        </header>
    );
};

关于javascript - 如何将函数传递给 react 中的另一个组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54318952/

相关文章:

javascript - jQuery 文件上传插件成功回调

javascript - 输入后换行

javascript - 使用 create-react-app 构建开发/调试构建

javascript - 自定义 babel 插件 - 无法遍历(访问)JSXElement

reactjs - 使用没有 &lt;script type ="text/jsx"> 标签的 JSX?

reactjs - 如何使用 react Hook 删除查询参数?

javascript - 如何从浏览器编辑 JS?

javascript - 如何在运行时在 MVC 循环中动态创建 IFrame

javascript - 如何在选择下拉选项时触发Vue中的功能

javascript - 语法错误 : Unexpected token > in Coffeescript