Remix.Run용 동적 링크
6782 단어 remixwebdevtypescriptreact
자, 이제 좋은 부분입니다. 내가 지금까지 정말 좋아했던 Remix에는 많은 작업을 수행하기 위해 내보낼 수 있는 몇 가지 기능이 있습니다.
LoaderFunction
페이지를 로드하기 전에 서버측 가져오기를 수행합니다. ActionFunction
주로 양식 제출에 사용되는 게시물 요청을 처리합니다. MetaFunction
는 메타 데이터를 처리하고 마지막으로 LinkFunction
는 스타일시트, 스크립트 태그, 미리 로드 등을 추가합니다. 자세한 내용은 here을 참조하십시오.내가 생각하는 문제는 내가 언급한 처음 세 개가 Remix 컨텍스트에 액세스할 수 있다는 것입니다. 따라서 이러한 기능에서 노드 요청, URL의 모든 매개변수 등에 액세스할 수 있습니다. 마지막 항목에서는
LinkFunction
액세스할 수 없습니다. 이제 그것은 나에게 의미가 있습니다. 해당 컨텍스트를 포함하면 전체 페이지 흐름이 느려지거나 스타일 깜박임이 발생할 수 있습니다. 확실하지 않습니다. LinkFunction
에 Remix 컨텍스트가 포함되지 않은 이유에 대해 자세히 알아보기 위해 Github에서 토론을 시작할 수 있습니다.그렇다면 데이터베이스 쿼리나 쿠키 값을 기반으로 하는 스타일시트를 포함해야 한다면 어떻게 될까요? 다행스럽게도 이 기사에서 그 방법을 알려드립니다.
Remix에서 모든 경로가 반응 구성 요소 및/또는 웹 사이트의 실제 페이지일 필요는 없습니다. 기본 내보내기 없이 로더 또는 작업(또는 둘 다)을 내보낼 수 있으며 API 끝점이 있습니다. 내 링크 함수 딜레마와 함께 이것을 시도해 봅시다...
root.tsx
파일에서 links
라는 함수를 내보냅니다. 이를 통해 전체 응용 프로그램에 전역적으로 링크를 포함할 수 있습니다. 내 사용 사례에서는 사용자가 생성하고 해당 스타일도 로드해야 하는 내 데이터베이스에 저장된 테마가 있습니다.// root.tsx
export function links() {
return [
{ rel: "stylesheet", href: styles },
{ rel: "stylesheet", href: "/user-theme.css" },
];
}
user-theme[.]css.tsx
라는 새 파일을 만듭니다. 대괄호 구문은 펑키해 보이지만 마침표를 벗어날 수 있는 방법입니다. robots[.]txt.tsx 및 sitemap[.]xml.tsx 파일에 대해 이 구문을 사용했는데 훌륭하게 작동합니다.//user-theme[.].css
export const loader: LoaderFunction = async ({ request }) => {
const { data, error } = await supabase.from("themes").select("*").maybeSingle();
/**
* data.styles looks like this...
* {
* "--primary-color": "#hexvalue",
* "--secondary-color": "#hexvalue",
* ...
* }
*/
let cssString = "";
if (data && data.styles) {
const { styles } = data;
const cssVars = Object.keys(styles).reduce((acc, key) => {
return [
...acc,
`${key}: ${styles[key]};`
];
}, []).join("\n");
cssString = `:root{${cssVars}}`
}
return new Response(cssString, {
headers: {
"Content-type": "text/css; charset=UTF-8",
},
});
};
그래서 그곳에서 많은 일이 일어나는 것처럼 보이지만 아주 간단합니다. 필요한 정보에 대해 데이터베이스를 쿼리한 다음 JSON을 css 문자열로 구문 분석합니다. 나는 css 변수를 사용하고 있으므로 그것들을
:root
선언에 주입하고 text/css
콘텐츠 유형과 함께 제공합니다.그것은 그! 이제 데이터베이스 쿼리의 동적 CSS가 모든 서버 측 브라우저에서 볼 수 있습니다. 클라이언트 측 요청이 없으며 로드하는 동안 스타일이 이상하게 깜박이지 않습니다.
이 접근법에 대해 어떻게 생각하는지 알려주세요! 내 사용 사례가 데이터베이스 쿼리라는 것을 알고 있지만 요청 쿠키에 액세스하고 다크 모드 스타일시트와 실제로 원하는 모든 것을 반환할 수도 있습니다.
Reference
이 문제에 관하여(Remix.Run용 동적 링크), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/fvaldes33/dynamic-links-for-remixrun-25dg텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)