Вы должны использовать componentDidUpdate (prevProps, prevState)
componentDidUpdate вызывается каждый раз, когда компонент собирается получить новые реквизиты или внутреннее состояние, здесь вы можете вмешаться до того, как компонент будет перерисован.
Таким образом, в hello.js вместо getDerivedState:
componentDidUpdate(prevProps) {
if (prevProps.src !== this.props.src) {
this.test()
}
}
выполняется сравнение «if (prevProps.src! == this.props.src)», поэтому компонент обновляется только в случае изменения свойства src,предотвращение ненужных повторов.