A / t для документов, HOC не изменяет компонент ввода и не использует наследование для копирования своего поведения.Скорее, HOC создает исходный компонент, заключая его в компонент контейнера.
При реагировании на изменения реквизита компонент перерисовывается с помощью newProps.
Так как в HOC мы передаем реквизиты обоим компонентам-оберткам test1 и test2, поэтому они должны повторяться при каждом изменении реквизита.Но этого не происходит.Фактически, test1 & test2 рендерится, затем test2 меняет реквизиты путем поднятия состояния и повторного рендеринга.Но test1 остается таким же.Проверьте прикрепленный образ.
Мне интересно узнать, как реагируют на соединение и реактив-маршрутизатор с-роутером фактически реагируют на каждое изменение реквизита для хранения и перерисовки компонента.
РеальныйПроблема на Github
class Test extends React.Component {
render() {
return (
<div>
<Test1 />
<Test2 />
</div>
)
}
}
Компонент с HOC
class Test1 extends React.Component {
render() {
return(
<div>
{
this.props.test1
}
{
this.props.test2
}
</div>
)
}
}
export default withHOC(Test1);
Другой компонент с HOC
class Test2 extends React.Component {
render() {
return(
<div>
{
this.props.test1
}
{
this.props.test2
}
<button type='button' onClick={()=>this.props.update('test')}>Update </button>
</div>
)
}
}
export default withHOC(Test2);
Компонент высшего порядка
function withHOC(WrappedComponent) {
class Test extends React.Component {
constructor(props) {
super(props);
this.state = {
test1: 'test1',
test2: 'test2'
}
}
update = (u) => {
this.setState({
test2: u
})
}
render() {
const test1 = this.state.test1;
const test2 = this.state.test2;
return (<WrappedComponent test1={test1} test2={test2} update={this.update}/>);
}
}
return Test;
}
export default withHOC;
Журнал методов жизненного цикла