"react": "^16.2.0",
"react-dom": "^16.2.0"
Just upgraded to react 16 from 15.0.2, and using event currentTarget.value will give me undefined. Basically I have a stateless child component that will fire the callback when it's clicked, and will pass an extra params through DOM API value field
<a className="btn-sm" onClick={onDelete} value={data}>
<i className="fa fa-trash" aria-hidden="true" />
</a>
And in my parent component the callback is as follows, the param is not accessible in 16 anymore
onDelete(event) {
const data = event.currentTarget.value; //works in react 15.0.2, but returns undefined in 16
...
}
So I looked into the event that is being returned in both versions of React, looks like in 16 the _dispatchInstances is a FiberNode, whereas in 15 is a ReactDOMComponent

React 16

React 15
Is this an intentional change? If so, how do I go about passing this params to the callback? I don't really want to use arrow functions since that affects the performance
@yidingalan
HTMLAnchorElement doesn't have value property. So do not expect it to work with react. Previous behavior could be a bug.@TrySound is right. This probably shouldn't have worked in React 15. The reason it did is because value was a whitelisted attribute that was also configured to be set as a property. Which means it was set like:
node.value = value;
Instead of being set as an attribute
node.setAttribute('value', value)
This meant that React was creating a new value property on the element, which probably shouldn't have happened. Now, React sets value as an attribute using setAttribute. Reading event.target.value still works with input elements because the DOM will keep the property in sync with the attribute. Since anchor elements don't have a value property by default, setting the attribute doesn't set the property.
I recommend either using an arrow function (unless you've benchmarked that this is a problem, which is rare) or using a data attribute like data-value.
Hope that helps!
event.currentTarget.getAttribute('value') also seems to work.
Hi there,
i just went through the same problem asking myself what was wrong with me. Looking at official React documentation you have to use event.persist() on SyntheticEvent in order the target property to be filled correctly; this is because it's an asynchronous way to handle events and so, its values are only promise before doing "event.persist()".
There is a better way to handle it: use destructuring on the event object. Instead of referencing the event parameter as (event) => {...} you can reference its target directly using desctructuring as follow: ({ target }) => {...}
Most helpful comment
event.currentTarget.getAttribute('value') also seems to work.