【问题标题】:How to re-render parent component from child component如何从子组件重新渲染父组件
【发布时间】:2026-02-10 20:50:02
【问题描述】:

父组件有一个 p 标记,可以为其内部文本设置动画。刷新页面时动画效果。

这里是父组件:

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;

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

【问题讨论】:

  • 能否提供animate-left的详细信息?
  • @Yung-DaLinLynda,我正在使用一个名为“W3.CSS”的 CSS 框架。我从类名中删除了“w3-”。 css没有问题。当我刷新页面时,动画效果很好。但是当我单击按钮时它不起作用。 w3schools.com/w3css/…

标签: javascript reactjs


【解决方案1】:

您必须在父组件中有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;

【讨论】:

  • 它不起作用。但是当我单击按钮时,console.log 打印 得到渲染 但动画不起作用
  • animate-left类的内容是什么?
  • .animate-left{position:relative;animation:animateleft 0.4s}@keyframes animateleft{from{left:-300px;opacity:0} to{left:0;opacity:1}}
  • 强制动画将key={this.state.counter}添加到p标签我将编辑我的答案。