Comments (9)
Thank you for the explanation and reference documentation! Makes sense.
from react2angular.
Looks like changing the array itself updates the react component but changing the contents of the array does not.
from react2angular.
This is because of the React Component's implementation of prop change detection. If you pass in a react PureComponent, or do not implement a suitable shouldComponentUpdate
then react will only re-render when the prop reference changes. You should take a look at the React docs for change detection and PureComponent here: https://reactjs.org/docs/react-api.html#reactpurecomponent.
In summary. The issue lies with your component, not react2angular
and your React component needs to react to deep prop changes.
from react2angular.
@ajdaniel As far as I can see, the component in question doesn't implement neither PureComponent, nor shouldComponentUpdate
Therefore it's not the react component that prevents rerendering
It seems that the angular component doesn't trigger a rerender for some reason.
from react2angular.
After looking at the source code, I believe the problem lies here: https://github.com/coatue-oss/ngcomponent/blob/master/index.ts#L42
So basically the ngcomponent
lib that react2angular
uses implement something similar to a PureComponent. And this conflict with the react paradigm where we just rerender everything without comparing props by default.
from react2angular.
@everdimension well spotted. Yes, this is a replica of PureComponent
which means it is only checking if the prop value has changed. This means for example: if a prop is an array, and an item is pushed to that array, the component will not re-render.
I think react2angular
should probably not have an opinion on this, as the user should create their own implementation of shouldComponentUpdate()
and have total control.
from react2angular.
I think react2angular should probably not have an opinion on this
I agree, but currently it does. Which is a problem.
react2angular
should not block rerendering by making a shallow comparison.
But at the moment, it seems to be impossible to make a component update after pushing an element to the array because the inner logic of ngcomponent
will block rerender.
from react2angular.
@everdimension as this issue is now closed, can you please raise a new issue detailing this information, and stating that we should address this. The solution is yet unknown, but we should track this in a new issue. Thank you.
from react2angular.
Ok, sure!
from react2angular.
Related Issues (20)
- Is it possible to pass function with params from angular parent component to react child component with react2angular library? HOT 1
- Collision of React Props and Angular Component Class Members HOT 1
- Doesnt work correct in table HOT 1
- No documentation on function binding incompatibility HOT 1
- React hooks HOT 5
- How to share React Context with Angular HOT 3
- Memory leak HOT 4
- How to provide redux store store? HOT 2
- Uncaught SyntaxError: Cannot use import statement outside a module
- Is it works with TypeScript? HOT 2
- Angular 10 support?
- Does this support React.lazy component HOT 1
- How can I render children inside the react component? HOT 2
- Issue when bundling
- Critical Vulnerability in react2angular > ngcomponent > lodash path
- Webpack Module Federation Support
- angularApp.component is not a function HOT 1
- React 18 upgrade HOT 4
- React 18 Support HOT 3
- Are React functional components supported? HOT 1
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 react2angular.