den0820
@den0820
Фронтенд Junior разработчик.

Не работает Forward Ref?

Добрый вечер. Помогите, пожалуйста , разобраться почему при прокидывании ref через HOC, используя forwardRef, я получаю null, при выводе в консоль this.documentRef
@connect(
    state => ({
        // code...
    }),
    {
        requestDocuments: someRequests
    }
)

export class MyComponent extends React.Component  {
// Code...

render() {
        return (
                <Grid ref={this.props.forwardRef} />
        );
    }
}


High Order Component:
import React, {forwardRef} from 'react';
import {MyComponent } from './container';

export const MyComponentHOC = React.forwardRef((props, ref) => (
    <MyComponent {...props} forwardRef={ref} />
));


OutSide Call:
import {MyComponentHOC} from './';

class StatefullMyComponentHOC extends React.Component {
    state = {};

    handleClick = (event) => {
        console.log(this.documentRef);
    };

    documentRef = createRef();
 
    render() {
        return (
            <Fragment>
                <StatefullMyComponentHOC ref={this.documentRef}  />
                <button id="4" onClick={this.handleClick}>Обновить контейнер</button>
            </Fragment>
        );
    }
}
  • Вопрос задан
  • 1374 просмотра
Решения вопроса 1
rockon404
@rockon404 Куратор тега React
Frontend Developer
Либо перепишите Grid на forwardRef по аналогии с примером:
const Grid = React.forwardRef((props, ref) => (
  <div ref={ref}>{props.children}</div>
));


Либо исправьте:
export class MyComponent extends React.Component {
  render() {
    return (
      <Grid innerRef={this.props.forwardRef} />
    );
  }
}

и в компоненте Grid:
const Grid = props => (
  <div ref={props.innerRef}>{props.children}</div>
);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы