<Route path="/film/:film" component={Film} />
<Link to={`/film/${res.filmId}`} >{res.nameRu}</Link>
filmId
), то происходит смена значений в переменной name
, однако у меня подключен внешний скрипт:<script src="..."></script>
<div id="block" data-id={`${name}`}></div>
name
перерендерился: <div id="block" data-id={`${name}`}></div>
import React, { useEffect, useState } from 'react'
import { useParams } from "react-router-dom";
import { Helmet, HelmetProvider } from 'react-helmet-async';
const Film = () => {
const { film: id } = useParams();
const [name, setName] = useState(null);
useEffect(() => {
setName(id)
}, [id])
return (
<div>
<Helmet>
<script src="..."></script>
<title>{`${name} читать историю онлайн`}</title>
</Helmet>
<div id="block" data-id={`${name}`}></div>
</div>
)
}
export default Film
setName
выполняется только при обновлении страницы. Больше не вижу ничего, что бы его вызывало для перерисовки компонента. <div id="block" data-id={`${name}`}></div>
меняется в зависимости от того какое значение присвоено data-id
. И мне нужно чтобы контент в этом блоке менялся без перезагрузки страницы, при изменении ссылки (при нажатии на какой-либо Link
, который меняет значение переменной name
). name
, хранящийся в статусе, изменяется через специальный метод, именуемый у вас setName
. Если просто присвоить в name
значение, компонент перерисовываться не будет.data-id={`${name}`}
и выводится блок с информацией, но когда я перехожу по ссылке, которая ведёт на этот же компонент, но при этом меняется сама ссылка и переменная name
, то контент в блоке не меняется, хоть и контент вне этого блока в этом компоненте меняется. Однако, если перезагрузить страницу с новым URL, то контент в блоке меняется.name
кроме этого компонента больше нигде не используется, то можно стейт вообще не использовать. import React from 'react';
import { useParams } from "react-router-dom";
import { Helmet, HelmetProvider } from 'react-helmet-async';
const Film = () => {
const { film } = useParams();
return (
<div>
<Helmet>
<script src="..."></script>
<title>{`${ film } читать историю онлайн`}</title>
</Helmet>
<div id="block" data-id={`${ film }`}></div>
</div>
)
}
export default Film
name
в return, но код действительно уже немного упростил, думаю нужно что-то сделать, чтобы инициировать перезагрузку данного блока и скрипта в return при смене ссылки. Только вот как это сделать - хз. useEffect(() => {
const script = document.createElement('script');
script.src = '...';
document.body.appendChild(script);
return () => {
document.body.removeChild(script);
}
}, [id])
UseEffect
я наконец смог прописать, что необходимо обновлять скрипт ориентируясь на dependency film
. useEffect
и ставим dependency на name
. div
и прописываем ему key={film}
.