Comments (4)
@MaciejNiklasinski I think you could add these block inside the useEffect
function and it will work as you expect:
if (ref.current === null) {
const id = map.size; //Symbol();
const handle = { id };
console.log(`Adding Symbol ${id} to map`);
map.set(id, handle);
ref.current = handle;
}
I also noticed that in the component before first mount the mentioned code gets triggered twice. And both time ref.current
is null
and map add two elements. Actually, the same behavior as you mentioned. Yeah, and only in the Strict Mode
from react.
@Werter12 Thank you for your suggestion, unfortunately in my real use case it won't work.
I need the handle object to be created and added to the map before the function returns the first time.
export const useSubscribction = () => {
const ref = useRef(null);
if (ref.current === null) {
const id = Symbol();
const handle = { id };
map.set(id, handle);
ref.current = handle;
}
useEffect(() => () => { map.delete(ref.current.id); }, [] );
// At this point before the function returns the first time I need a handle object to already exist.
// If it is moved to the useEffect (componentDidMount equivalent part) that will not be the case.
};
from react.
I've also encountered this bug: in strict mode, this
inside a class component will point to the second instance in both cases of componentDidMount()
/ componentWIllUnmount()
.
- Component instance A is created
- Component instance B is created
componentDidMount()
is called withthis
beingB
componentWillUnmount()
is called withthis
beingB
componentDidMount()
is called withthis
beingB
Because of that, clean-up is not possible and various "stale props" bugs occur because componentWillUnmount()
performs a clean-up of the instance B
which is the one that React keeps while the instance A
is what React disposes of but that instance A
remains "uncleaned" and its event listeners still operate.
I've submitted a separate bug report: #26467
from react.
@MaciejNiklasinski Have a look at my bug report: #26467
Is it the same issue? If yes then I guess the "weird" behavior is an intentional one to reveal the components that rely on doing stuff during render ("side effects").
from react.
Related Issues (20)
- [DevTools Bug] Cannot remove node "226752" because no matching node was found in the Store. HOT 11
- [DevTools Bug]: Regression - profiling doesn't store props value HOT 1
- [DevTools Bug]: Using different React instances across multiple frames throws errors HOT 4
- Bug:
- Props passed to components in an array are never updated HOT 6
- Bug: Don't crash the app if an async component is accidentally used on the client HOT 1
- Bug:
- Bug: Unable to type new character when textarea is focused, happen when using Japanese IME on IOS HOT 4
- Built-in Form Handling HOT 2
- Bug: Auto generated preload links should respect fetchpriority if specified HOT 5
- Bug: useTransition and uSES do not work together, uT is not resilient to amount-of-render HOT 1
- Bug: Dialog issue - Multiple modals appearing and close button not working HOT 1
- Bug: React 18 upgrade getting uncaught runtime errors HOT 2
- [DevTools Bug]: Strict mode badge points to the old docs HOT 4
- Update copyright text to Meta instead of Facebook HOT 5
- Bug: Cannot read properties of null (reading 'useState') HOT 1
- Bug: In a recursive components, `_debugSource` doesn't get updated HOT 3
- Bug: Uncaught (in promise) DOMException: Failed to execute 'postMessage' on 'Window': function () { [native code] } could not be cloned. HOT 2
- Bug: useId IDs have special characters that conflict with certain DSLs (like CSS) HOT 2
- [question] Is there any reason not to set this field to read-only?
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.