Comments (4)
Added a couple of more debugger
s.
Result:
Test > Bar1 > Ex1.render() > Ex2.render() > Ex2.componentDidMount() > Ex1 > Ex2.componentDidMount()
Further investigation is needed and maybe someone can explain if this is intentional behavior.
Click for code w/ added debuggers
import React, { useRef, Component, forwardRef } from "react";
class Ex1 extends Component {
render() {
const { innerRef, children } = this.props;
debugger;
return (
<div
ref={(element) => {
console.log(
"This line is called after the componentDidMount in Ex2."
);
innerRef.current = element;
debugger;
}}
className="ex1"
>
{children}
</div>
);
}
}
class Ex2 extends Component {
componentDidMount() {
const { targetRef } = this.props;
console.log("This line is hit before targetRef is set.");
console.log(
"Also it appears to be called twice. Once before the ref is set and once after."
);
debugger;
}
render() {
const { innerRef } = this.props;
debugger;
return <div className="ex2">I do my own thing</div>;
}
}
const Bar1 = forwardRef((props, ref) => {
const { children } = props;
debugger;
return <Ex1 innerRef={ref}>{children}</Ex1>;
});
function Test() {
const targetRef = useRef();
debugger;
return (
<Bar1 ref={targetRef}>
<Ex2 targetRef={targetRef} />
</Bar1>
);
}
export default Test;
from react.
- I think this is the expected behavior as react renders children before the parent element, hence
componentDidMount
ofEx2
is called before theref
can be set on the parent i.e;div
ofEx1
componentDidMount
is called twice because your app must be running in strict mode.
from react.
- I think this is the expected behavior as react renders children before the parent element, hence
componentDidMount
ofEx2
is called before theref
can be set on the parent i.e;div
ofEx1
componentDidMount
is called twice because your app must be running in strict mode.
I have somewhat similar conclusion to this. I guess this issue could be closed then @CodeMedic42?
from react.
Sorry for the late response. You can close this if this is the intended behavior.
I guess I expected all componentDidMount callbacks to be called after all the render callbacks have ben resolved for the current render cycle. I never considered a component mounted until the it's children have been mounted. It just feels weird that a component can be considered mounted while the render cycle is still active.
from react.
Related Issues (20)
- [React 19] eslint-plugin-react-compiler: “Writing to a variable defined outside a component or hook is not allowed. Consider using an effect” HOT 3
- Bug: eslint-plugin-react-hooks any hook configured in additionalHooks receives warning HOT 5
- [DevTools Bug]: Null destructuring error inspecting a component with `useFormStatus` HOT 1
- [compiler] Combine class component and function component or only class component HOT 3
- ghgh
- [spam]
- [spam]
- [spam]
- [spam]
- Bug: Hydration fails when async script is located outside head tag HOT 6
- [React 19]
- Bug: onSelect does not fire when contentEditable is set to "plaintext-only" HOT 1
- [React 19]
- Unable to select color using voice access commands. HOT 1
- [spam]
- [spam]
- Bug: Updater function of set state in promise.then clause of useEffect are called twice and replacing state before promise.then doesn't work as expected. HOT 4
- [Compiler Bug]: Mutating a ref passed as argument from a hook warns HOT 2
- [React 19]
- Bug: Changes to marker references post-render are not updating in Safari
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from react.