I recently started using Material Design React, but I have just come across that data-someField does propagate the value to the dataset map.
Example:
<Input data-role=‘someValue’ onChange={this.onChange} />
onChange = e =>{
const role = e.target.dataset.role
const role2 = e.currentTarget.dataset.role
}
Both roles in the onChange handler are undefined. This doesn’t happen if I change the Input tag to a regular html input.
Any ideas why Material Design doesn’t allow data attributes or if there is any workarounds?
Thank you in advance!
--- After @Springer suggestion, I tried using the inputprops, but noticed that only the name attribute is available, the rest are undefined.
``` <Input
value={role.name}
disabled={!this.state.editMode}
inputProps={{
name: 'MyName',
role: 'MyRole',
dataset: {
degree: 'Teniente'
},
data: {
roleId: role.uuid
},
dataRoleId: {
roleId: role.uuid
}
}}
disableUnderline={true}
data-role-id={role.uuid}
role={role}
onChange={this.onChangeExistingRole}
/> ```
To set a data attribute on an element in React, set the attribute directly on the element, e.g. <button data-test-id="my-btn"> or use the setAttribute() method, e.g. el. setAttribute('data-foo', 'bar') . You can access the element on the event object or using a ref .
To add custom HTML attributes in React, we can just add them as we do with regular HTML element attributes. We just add the custom-attribute custom attribute and it'll be rendered in the HTML. This works since React 16.
With the components from the Material-UI library it's very easy to make use of Material Design elements in your React web or mobile application.
In the react material api they use the inputProps
to pass extrat object (props , data..)
see doc
inputProps : Attributes applied to the input element.
by example to add role data attribute you should add to your inputProps
props the data-role options ( 'data-role':'roleAttrib'
), the input should looks like :
<Input value={role.name}
disabled={!this.state.editMode}
inputProps={{
name: 'MyName',
'data-role':'role' // <------- add data attribute like this
...
}} />
same thing for other component
Except <Button>
you add the data attribute directly in component like
<Button data-your-attrib="value" />
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With