Skip to content

[Compiler Bug]: non-null assertion on objects produces non working js #33054

Open
@FrancescoLuzzi

Description

@FrancescoLuzzi

What kind of issue is this?

  • React Compiler core (the JS output is incorrect, or your app works incorrectly after optimization)
  • babel-plugin-react-compiler (build issue installing or using the Babel plugin)
  • eslint-plugin-react-compiler (build issue installing or using the eslint plugin)
  • react-compiler-healthcheck (build issue installing or using the healthcheck script)

Link to repro

https://playground.react.dev/#N4Igzg9grgTgxgUxALhASwHYBcEwGYCGiABACoJhbAA6GxxOlyxlMmA5gNy0C+ttCAB4AHCDCzE4EDJTIUsAIRgQA1gjoBeYgAoAlMQ0A+YjTqTpsgNqMsAGhYIs5SgF0DtevQBKCIlgB0UGAIAMpYBDjEADxysgA+xBhQADbJxMbaSam63BgexDCOsHTa+fRRhmWeUQBGUFhY0sTSAMLJaHAqBiZ6BsY2BlpZaQD8Dk7y2sA2yNQgNnM8+szBE5SZKcm6PMakEOzsyQjRAPR1DdKVZp7R5410ACZoYAQ1Rw8awACENjzNGG0OiotMBekYpDIIEd-Ml9tobF9-DZtsYAApsbCnO6XKpRE5Xei6Xj8DBCUTicwyCTOLAtMSFOASLRg4ymegQqw2eyrGluDRVHx+QLBMIRY4xGnEBLDdI6YY5En0QpYYo6XEEm63er3f6AzqfFkMeSDRKbYhjHmTYBGpjEOYLEDEJbEFaOGkbbI7Mj7Q7is7anHXarYx7PV7vT4-eR-VrtfWg-RGEzENB4HTIymQaGw9jw+RI+T6Hhe9GYCR4kMa8r4-JEvIYHggHhAA

Repro steps

running the following code will result in a Cannot read properties of null (reading 'test')

interface Test{
  test: string;
}

export const TestBroken = () => {
  const [test, setTest] =
    React.useState < Test | null > (null);

  return (
    <>
      <button onClick = {() => test == null ? setTest({test:"test"}) : setTest(null)}> Toggle </button>
      <button disabled={!test} onClick= {() =>console.log(test!.test)}> Print </button>
    </>
  )
}

this code runs fine when changing the non-null assertion into an if statement:

-      <button disabled={!test} onClick= {() =>console.log(test!.test)}> Print </button>
+     <button disabled={!test} onClick={() => { if (test) console.log(test.test) }}> Print </button>

How often does this bug happen?

Every time

What version of React are you using?

19.1.0

What version of React Compiler are you using?

19.1.0-rc.1

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions