javascript - 如何从父组件调用子组件中的函数

标签 javascript reactjs

我想在单击 Blog.js 中呈现的按钮时调用 Blogpostreader.js 中的 showExtraBlogposts() 函数

我尝试用 onClick={Blogpostreader.showExtraBlogposts()} 调用它,它返回 showExtraBlogposts() 不是 Blogpostreader 的函数...

import React from 'react';
import axios from 'axios';
import Blogpost from './Blogpost.js';

class BlogpostReader extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      error: null,
      isLoaded: false,
      blogposts: [],
      blogpostAmount: "",
      counter: 1,
      renderedBlogposts: []
    };
  }

  componentDidMount() {
    //API call
  }

  renderBlogpost(i) {
    // Single blogpost rendered
  }

  showExtraBlogposts() {
    for(this.state.counter; this.state.counter < (this.state.blogpostAmount + 2); this.state.counter++) {
      this.state.renderedBlogposts.push(
        <div key={this.state.blogposts[this.state.counter].id} className="col-12 col-sm-12 col-md-12 col-lg-6 col-xl-6 whole-blogpost">
          {this.renderBlogpost(this.state.blogposts[this.state.counter])}
        </div>)
    }
    this.forceUpdate();
  }

  render() {
    this.state.blogpostAmount = this.state.blogposts.length;
    for (this.state.counter; this.state.counter < this.state.blogpostAmount && this.state.counter < 5; this.state.counter++) {
      this.state.renderedBlogposts.push(
        <div key={this.state.blogposts[this.state.counter].id} className="col-12 col-sm-12 col-md-12 col-lg-6 col-xl-6 whole-blogpost">
          {this.renderBlogpost(this.state.blogposts[this.state.counter])}
        </div>)
    }
    return this.state.renderedBlogposts;
  }
}

export default BlogpostReader;

我的博客组件如下所示:

import React from 'react';
import BlogpostReader from './BlogpostReader.js';
import BlogpostWriter from './BlogpostWriter.js';

class Blog extends React.Component {  
  render() {
    return (
      <div className="row">
        <div className="col-12 col-sm-12 col-md-6 col-lg-6 col-xl-6">
          <div className="wrap">
            <BlogpostWriter className="blogpost-writer"/>
          </div>
        </div>
        <div className="col-12 col-sm-12 col-md-6 col-lg-6 col-xl-6">
          <div className="wrap">
            <div className="row">
              <BlogpostReader />
            </div>
            <div className="centered-button">
              <button className="styled-button">Meer laden</button>
            </div>
          </div>
        </div>
      </div>
    );
  }
}


export default Blog;

如何解决这个问题?

编辑 我已经修改了组件,以便 BlogpostReader 呈现按钮。我应该能够调用 showExtraBlogposts() 方法,但它一直给我一个错误,因为我的应用程序即使不单击按钮也会运行该方法...我该如何解决此问题?

最佳答案

您无法真正从父组件调用子方法。执行此操作的“ react 方式”是在父组件中存储一个 bool 值,以跟踪是否应该显示它,然后通过子组件的 props 将该 bool 值传递给子组件。

关于javascript - 如何从父组件调用子组件中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56114356/

相关文章:

reactjs - 如何在渲染React组件时添加逻辑if语句?

javascript - 加载对谷歌图表刷新的影响

javascript - 如何循环并显示具有 onClick 的按钮并将不同的变量传递给另一个函数?

javascript - 如何创建动态字典和添加删除键值对?

javascript - 突出显示图像 map 上的区域

javascript - React Router,在参数之后嵌套路由

javascript - 在 jest/enzyme 中,如何模拟点击一个元素,其中 eventListener 由 [element].addEventListener(不是 window.addEventListener)绑定(bind)?

javascript - React HOC 返回一个匿名 _class

javascript - 单击按钮时添加值

javascript - 调用对象中定义的函数