Skip to content

Inconsistent setState behavior while using controlled components #14328

@mvbattan

Description

@mvbattan

Do you want to request a feature or report a bug?
I want to report a bug.

What is the current behavior?
While using an input as controlled component:

<input
  type="input"
  value={this.state.inputValue}
  onChange={this.handleChange}
/>

writing

 handleChange = e => {
   this.setState({ inputValue: e.target.value });
 };

works well but using functional setState

 handleChange = e => {
   this.setState(() => ({ inputValue: e.target.value }));
 };

crashes with TypeError: Cannot read property 'value' of null

If the current behavior is a bug, please provide the steps to reproduce and if possible a minimal demo of the problem. Your bug will get fixed much faster if we can run your code and it doesn't have dependencies other than React. Paste the link to your JSFiddle (https://jsfiddle.net/Luktwrdm/) or CodeSandbox (https://codesandbox.io/s/new) example below:

Working example:
https://jsfiddle.net/Luktwrdm/1435/

Crashing example (using functional setState)
https://jsfiddle.net/Luktwrdm/1436/

Demo:
reactbug

What is the expected behavior?
The expected behavior is that both setState (with object and with function) should have the same behavior for end-users.

Which versions of React, and which browser / OS are affected by this issue? Did this work in previous versions of React?
Browser: Google Chrome Version 70.0.3538.102 (Official Build) (64-bit)
React Version: 16.6.1

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions