File tree Expand file tree Collapse file tree 2 files changed +42
-5
lines changed
packages/react-reconciler/src Expand file tree Collapse file tree 2 files changed +42
-5
lines changed Original file line number Diff line number Diff line change @@ -493,7 +493,9 @@ function commitBeforeMutationEffectsOnFiber(
493493 }
494494
495495 switch ( finishedWork . tag ) {
496- case FunctionComponent : {
496+ case FunctionComponent :
497+ case ForwardRef :
498+ case SimpleMemoComponent : {
497499 if ( enableUseEffectEventHook ) {
498500 if ( ( flags & Update ) !== NoFlags ) {
499501 const updateQueue : FunctionComponentUpdateQueue | null =
@@ -510,10 +512,6 @@ function commitBeforeMutationEffectsOnFiber(
510512 }
511513 break ;
512514 }
513- case ForwardRef :
514- case SimpleMemoComponent : {
515- break ;
516- }
517515 case ClassComponent : {
518516 if ( ( flags & Snapshot ) !== NoFlags ) {
519517 if ( current !== null ) {
Original file line number Diff line number Diff line change @@ -887,6 +887,45 @@ describe('useEffectEvent', () => {
887887 assertLog ( [ 'ContextReader: second' ] ) ;
888888
889889 logContextValue ( ) ;
890+ assertLog ( [ 'ContextReader (Effect event): second' ] ) ;
891+ } ) ;
892+
893+ it ( 'reads the latest context value in forwardRef Components' , async ( ) => {
894+ const MyContext = createContext ( 'default' ) ;
895+
896+ let logContextValue ;
897+ const ContextReader = React . forwardRef ( function ContextReader ( props , ref ) {
898+ const value = useContext ( MyContext ) ;
899+ Scheduler . log ( 'ContextReader: ' + value ) ;
900+ const fireLogContextValue = useEffectEvent ( ( ) => {
901+ Scheduler . log ( 'ContextReader (Effect event): ' + value ) ;
902+ } ) ;
903+ useEffect ( ( ) => {
904+ logContextValue = fireLogContextValue ;
905+ } , [ ] ) ;
906+ return null ;
907+ } ) ;
908+
909+ function App ( { value} ) {
910+ return (
911+ < MyContext . Provider value = { value } >
912+ < ContextReader />
913+ </ MyContext . Provider >
914+ ) ;
915+ }
916+
917+ const root = ReactNoop . createRoot ( ) ;
918+ await act ( ( ) => root . render ( < App value = "first" /> ) ) ;
919+ assertLog ( [ 'ContextReader: first' ] ) ;
920+
921+ logContextValue ( ) ;
922+
890923 assertLog ( [ 'ContextReader (Effect event): first' ] ) ;
924+
925+ await act ( ( ) => root . render ( < App value = "second" /> ) ) ;
926+ assertLog ( [ 'ContextReader: second' ] ) ;
927+
928+ logContextValue ( ) ;
929+ assertLog ( [ 'ContextReader (Effect event): second' ] ) ;
891930 } ) ;
892931} ) ;
You can’t perform that action at this time.
0 commit comments