21

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}
                  /> ```
Olivier Tassinari
  • 8,238
  • 4
  • 23
  • 23
Antuan
  • 501
  • 2
  • 6
  • 18
  • use inputProps to pass what ever you want to your input – Bourbia Brahim Mar 02 '19 at 17:30
  • see https://material-ui.com/api/input/ – Bourbia Brahim Mar 02 '19 at 17:30
  • 1
    The reason why none of the fields, but name were working was because they are custom attributes, so you have to put quotes around them: ```inputProps={{'data-role':'MyRole'}}```. Then you will be able to access them in the handler as follows: ```e.target.dataset.role``` – Antuan Mar 02 '19 at 18:06

1 Answers1

26

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" />
Bourbia Brahim
  • 14,459
  • 4
  • 39
  • 52