Как мне провести рефакторинг общих компонентов React?

#reactjs #refactoring #material-ui

#reactjs #рефакторинг #материал-пользовательский интерфейс

Вопрос:

Я оформляю required TextField вот так

 const styles = theme => ({
  labelAsterisk: {
    color: "red"
  },
  cssLabel: {
    color: "orange"
  },
  cssRequired: {
    "amp;:before": {
      borderBottom: "2px solid orange"
    }
  },
});


    <TextField
      id="requiredField"
      label="Required Field"
      value="Custom Text"
      required
      InputLabelProps={{
        classes: {
          root: classes.cssLabel
        },
        FormLabelClasses: {
          asterisk: classes.labelAsterisk
        }
      }}
      InputProps={{
        classes: {
          underline: classes.cssRequired
        }
      }}
      margin="normal"
    />
  

У меня много таких обязательных полей в моих формах, и я хотел бы стандартизировать их вместо копирования и вставки больших кусков кода.

Каков наилучший способ реорганизовать это, чтобы мне нужно было только указывать id , label и value каждый раз, когда я его использую?

Нужно ли расширять TextField ?

Создать новый компонент, который расширяется React.Component ?

Использовать функцию или константу?

Ответ №1:

Вот как бы вы определили свой пользовательский компонент TextField:

 const RequiredTextField = ({id, label, value}) => (
  <TextField
    id={id}
    label={label}
    value={value}
    required
    InputLabelProps={{
      classes: {
        root: classes.cssLabel
      },
      FormLabelClasses: {
        asterisk: classes.labelAsterisk
      }
    }}
    InputProps={{
      classes: {
        underline: classes.cssRequired
      }
    }}
    margin="normal"
  />
)
  

И вот как вы могли бы это использовать:

 <RequiredTextField id="some-id" label="some-label" value="some-value">