Один из подходов - присвоить переменную классу, чтобы каждый экземпляр класса включал переменную.Это значение не будет полностью статическим, так как его можно переназначить через this.variableName = 'newValue'
.
class MyComponent extends React.Component {
variableName = 'value'
render() {
return <div>{this.variableName}</div>
}
}
В качестве альтернативы вы можете сделать метод, который возвращает константу, в этом случае value
больше не может быть перезаписан.
const value = 'value'
class MyComponent extends React.Component {
getValue() {
return value
}
render() {
return <div>{this.variableName}</div>
}
}
Кроме того, предположим, что статическое значение может измениться, и вы хотели, чтобы все компоненты могли считывать обновленное значение (без избыточности), а затем могли обернуть его в объект.
В качестве альтернативы вы можете сделать это методом, который возвращает константу, в этом случае value
больше не может быть перезаписан.
const staticProperty = {
value: 'value'
}
class MyComponent extends React.Component {
getValue() {
return staticProperty.value
}
render() {
return <div>{this.variableName}</div>
}
}
В приведенном выше примере, поскольку staticValue
является изменяемым, вы можете запустить staticValue.value = 'some new value'
и это обновит значение.В следующий раз, когда любой компонент вызовет this.getvalue()
, он получит my new value
.Проблема с этим подходом заключается в том, что изменение staticValue.value
не будет инициировать обновление компонентов, так как не происходит никаких изменений свойств или состояний.
Если вы хотите, чтобы компоненты получали обновления об изменениях свойств, то в этот момент выповторно внедряем Redux, и я бы порекомендовал вам использовать Redux.Вам необходимо подписать каждый компонент, чтобы отслеживать изменения в определенном разделе состояния, и вы можете увидеть, как этого добиться, посмотрев исходный код Redux: https://github.com/reduxjs/redux/blob/master/src/createStore.js