React: Update Child Component Without Rerendering Parent

后端 未结 2 896
一生所求
一生所求 2021-02-13 20:39

What follows is a simple example:

<
2条回答
  •  后悔当初
    2021-02-13 21:25

    It is not possible what you want. To pass a prop to a child component, the parent component's state or props should change somehow. As you know, this triggers a re-render obviously, so all the children re-render. To be updated, your Clock component should be re-rendered and unmounted/remounted in this situation to reflect the DOM change.

    If your app is not so big and doesn't have so many children do not struggle with this problem since rendering is not so expensive. The expensive one is DOM manipulation of a component. Here, React diffs the real and virtual DOM and do not unmount/remount Label component even it re-renders. But, if you write your Label component as a PureComponent it doesn't re-render. But for Clock component to be updated like this, there is no way.

    class Label extends React.PureComponent {
      render() {
        console.log("rendered");
        return (

    {this.props.text}

    ) } } const Clock = ({ date }) => (
    {date.toLocaleTimeString()}
    ) class App extends React.Component { constructor() { super() this.state = { date: new Date() } } componentWillMount() { this.interval = setInterval( () => this.setState({ date: new Date() }), 1000 ) } componentWillUnmount() { clearInterval(this.interval) } updateTime() { } render() { return (
    ) } }

提交回复
热议问题