Skip to content

[Feature]: v8 React 19 support #35203

@Hotell

Description

@Hotell

Area

v8 (@fluentui/react, @fluentui/react-charting)

Describe the feature that you would like added

Add React 19 support to v8

Additional context

To support user migration efforts to React 19 while their apps are in hybrid state ( using both v8 and v9 ) v8 needs to support React 19 as well.

This goal of this issue is to get overview of effort needed to make this happen.

Status report:

data acquired from RIT test pipeline enabled on v8 packages https://github.com/microsoft/fluentui/actions/runs/17771405979/job/50508171575?pr=35199

package e2e test type-check
react N/A 🔴 N/A
react-hooks N/A N/A
react-examples ( covers react,charting,experiments ) N/A 🔴 / 389 errors in 225 files
react-charting N/A 🔴 N/A
react-experiments N/A 🔴 N/A

More Detailed Errors to Handle (test):

  • problem: console.error] react-test-renderer is deprecated
    • solution: refactor test to use RTL
  • problem: Error: Maximum update depth exceeded. This can happen when a component repeatedly calls setState inside componentWillUpdate or componentDidUpdate. React limits the number of nested updates to prevent infinite loops. at getRootForUpdatedFiber (/Users/runner/work/fluentui/fluentui/tmp/rit/react-19/node_modules/react-dom/cjs/react-dom-client.development.js:3860:11)
    • solution: fix logic
  • problem: Can't access .root on unmounted test renderer
    • solution: refactor test to use RTL

More Detailed Errors to Handle (e2e):

N/A

More Detailed Errors to Handle (type-check):

  • problem: TS2503: Cannot find namespace 'JSX'
    • solution: provide same custom JSX namespace types like we have in react-utilities to v8
  • problem: TS2322: Type 'RefObject<IDetailsList | null>' is not assignable to type 'IRefObject<IDetailsList> | undefined' -> componentRef?: IRefObject<IComboBox>;
    • solution: updating ref types like for v9?
  • problem: TS2554: Expected 1 arguments, but got 0. - > React.useRef<number | null>();
    • solution: updating useRef types
  • problem: error TS2786: 'TilesList' cannot be used as a JSX component. Its type 'typeof TilesList' is not a valid JSX element type. Type 'typeof TilesList' is not assignable to type 'new (props: any) => Component<any, any, any>'. Types of construct signatures are incompatible. Type 'new <TItem>(props: ITilesListProps<TItem>, context: any) => TilesList<TItem>' is not assignable to type 'new (props: any) => Component<any, any, any>'. Target signature provides too few arguments. Expected 2 or more, but got 1.
    • solution: TBA

Have you discussed this feature with our team

@microsoft/cxe-prg

Validations

  • Check that there isn't already an issue that requests the same feature to avoid creating a duplicate.

Priority

None

Sub-issues

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions