首页 > 解决方案 > 如何从子组件重新渲染父组件

问题描述

父组件具有 ap 标记,可以为其内部文本设置动画。当我刷新页面时动画工作。

这是父组件:

import React, { Component } from 'react';
import Child from './Child';

class Parent extends Component {
    rerender=()=>{
        this.forceUpdate()
    }
    render() {
        return (
            <div>
                <p className='animate-left'>Animation</p>
                <Child rerender={this.rerender}/>
            </div>
        );
    }
}

export default Parent;

这是子组件:

import React, { Component } from 'react';

class Child extends Component {
    clickHandler=()=>{
        this.props.rerender()
    }
    render() {
        return (
            <div>
                <button onClick={this.clickHandler}>Click</button>
            </div>
        );
    }
}

export default Child;

我想通过单击子组件的按钮再次动画/重新渲染父组件。怎么做?

标签: javascriptreactjs

解决方案


您必须state在父组件中拥有并将此状态传递给子组件:

import React, { Component } from "react";
import Child from "./Child";

class Parent extends Component {
  constructor(props) {
    super(props);
    this.state = {
      counter: 0
    };
  }
  rerender = () => {
    this.forceUpdate();
  };
  forceUpdate = () => {
    this.setState((state) => ({
      counter: state.counter + 1
    }));
  };
  render() {
    console.log("got rendered");
    return (
      <div>
        <p className="animate-left" key={this.state.counter}>Animation</p>
        <Child rerender={this.rerender} />
      </div>
    );
  }
}

export default Parent;

并在子组件中更新此状态:

import React, { Component } from "react";

class Child extends Component {
  clickHandler = () => {
    this.props.rerender();
  };
  render() {
    return (
      <div>
        <button onClick={this.clickHandler}>Click</button>
      </div>
    );
  }
}

export default Child;


推荐阅读