Как определить состояние для компонента React так же субъективно, как и стили кодирования, которые React продвигает сам. Обычно я иду по очень строгому маршруту, который выглядит следующим образом:
type State = {
someStateVar: number[];
};
export class MyComponent extends Component<{}, State> {
public readonly state: State = {
someStateVar: [],
};
public async componentDidMount() {
// Dynamically fetch data (maybe via axios) and populate the new state
const data = await axios.get<number[]>(...);
this.setState({ someStateVar: data });
}
}
Как видите, я явно отмечаю state
как только для чтения, просто убедитесь, что никто не пытается писать напрямую в него (даже если IDE и линтеры могут проверять эти ошибки без мер предосторожности в настоящее время).
Другая причина, по которой я предпочитаю не устанавливать состояние вручную с назначением, заключается в том, что это может привести к неправильной обработке состояния. Вы никогда не должны назначать что-либо непосредственно state
в методе класса без использования setState
.
Кроме того, я в основном сразу определяю значения по умолчанию и заполняю состояние динамическими данными в componentDidMount
. Этот подход позволяет сохранить краткость кода, отбросив явное определение конструктора, так как вы должны в любом случае переместить такую инициализацию на componentDidMount
и использовать конструктор только для методов привязки, если вы не используете обозначение стрелки члена класса для тех, что в первое место.