Я пытаюсь сделать Dancing Bars для индикации уровня. Значения для уровня поступают с сервера (вне дерева компонентов). Я динамически создал компонент Dancing Bars и хочу обновить текущий уровень в миллисекундах.
Ниже я попытаюсь достичь его.
var global;
function changeValue(value){
global = value; //Getting the updated value
}
class DancingBars extends React.Component {
componentDidMount() {
this.interval = setInterval(this.forceUpdate.bind(this), 40); // forcely update the component at this rate
}
render() {
if(global === undefined){
global = 50; //Set default value
}
return (
<LevelMeter fillColor={global}></LevelMeter>
);
}
}
Как видно из моего кода, я получаю обновите значение в changeValue() function
и передайте его компоненту DancingBars через global variable
. Первоначально, когда компонент DancingBars монтируется в DOM, затем компонент принудительно обновляется с некоторой скоростью (изменяемой), глобальная переменная не определяется при рендеринге. Поэтому я написал этот код сравнения для установки уровня по умолчанию, когда значения еще не поступили. Когда значения начинают изменяться, он автоматически обновляет уровень и работает плавно.
Но это не очень хороший способ, так как я не могу провести его через событие, потому что оно запускается при монтировании компонента и потребляет больше CPU Cycles , что впустую и не хорошо. Я также попробовал через redux state
, но он обновляется очень медленно, и это тоже не очень хорошая идея. Я не хочу, чтобы производительность снижалась.
Я создал компонент DancingBars динамически с array map function
, и я также использую избыточность для управления состоянием. Так как значения в реальном времени, и я не хочу хранить их в состоянии избыточности.
Есть ли простой способ сделать, например, когда значение изменяется в функции changeValue () тогда, а затем только в компоненте DancingBars следует повторно сделать? Или как мне перехватить событие изменения значения в функции changeValue (), передать значение в качестве подпорки компоненту DancingBars и сделать что-то с методом жизненного цикла shouldComponentUpdate?