Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Проблема с ssr #85

Closed
s-r-x opened this issue Apr 2, 2022 · 7 comments
Closed

Проблема с ssr #85

s-r-x opened this issue Apr 2, 2022 · 7 comments

Comments

@s-r-x
Copy link
Contributor

s-r-x commented Apr 2, 2022

Привет, спасибо за либу <3

на клиенте и сервере генерятся разные айдишники для aria-owns, вследствии чего появляется ошибка вида:

Prop `aria-owns` did not match. Server: "ATZZ5PwA-SCHKGkjw16vd" Client: "bb3fWbu5JqlldDXfxSeOL"

Было бы недурно добавить возможность прокидывать проп со своим уникальным id

что-то вроде того?

constructor(props: BaseProps<SuggestionType> & OwnProps) {
    super(props);
    this.uid = props.uid || nanoid();
  }
@vitalybaev
Copy link
Owner

Привет! Спасибо за сообщение!

Давно не работаю с классовыми компонентами и быстро не удалось найти другого решения. В функциональном можно было бы просто useRef с начальным значением и всё.

Я тогда действительно пока что добавлю дополнительный пропс

@s-r-x
Copy link
Contributor Author

s-r-x commented Apr 3, 2022

@vitalybaev даже если бы компонент был функциональным от useRef все равно было бы немного толку)

наиболее простое и наименее подвержденное ошибкам решение было бы юзать useId, но это соответственно только react 18 и только fc.

чтобы не безобразничать в конструкторе и всегда быть в синхронизации с входящим пропом uid при его изменении я бы предложил создать внутри геттер для uid. как-то так:

class Component {
  private _generatedUid = '';
  private get uid(): string {
    if(this.props.uid) return this.props.uid;
    if(!this._generatedUid) this._generatedUid = nanoid();
    return this._generatedUid;
  }
}

@vitalybaev
Copy link
Owner

Да, я уже реализовал способ через геттер и дописываю документацию.

Неужели useRef не помог? 🤔 Насколько я помню из своего опыта, начальное значение таких рефов прекрасно живут с регидратацией, как и обычный стейт.

@s-r-x
Copy link
Contributor Author

s-r-x commented Apr 3, 2022

@vitalybaev, useRef("petya") и useRef(1) - ок, а useRef(Math.random()) и useRef(nanoid()) - уже нет)

@vitalybaev
Copy link
Owner

Выпущено в версии v2.18.0. Спасибо за сообщение!

@vitalybaev
Copy link
Owner

useRef("petya") и useRef(1) - ок, а useRef(Math.random()) и useRef(nanoid()) - уже нет)

Да, вы абсолютно правы. Лучшим решением сейчас вижу - обновляться на React 18 как только получится и использовать useId и прокидывать его через новый пропс.

Вообще у меня давно уже есть планы по созданию новой мажорной версии, которая будет на хуках, более модульная, но всё как-то руки не доходят

@s-r-x
Copy link
Contributor Author

s-r-x commented Apr 3, 2022

@vitalybaev премного благодарен

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants