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