laravel 使用React进行主题化

ljsrvy3e  于 2023-10-22  发布在  React
关注(0)|答案(1)|浏览(110)

我正在使用CakePHP 2开发一个旧应用程序,我想通过基于Laravel和ReactJs(完整的API REST)制作一个新应用程序来从头开始进行现代化。实际上我有一个管理页面应用到一个特定的主题商店。例如,我有www.store1.comwww.store2.com。当我输入url www.store1.com时,它会加载选定的主题和模板,如果没有定义,它会加载默认值,使用CakePHP 2的主题系统,结构如下:

  • app
  • sass
  • store1
  • . scss文件,编译后的css转到View/Themed/store 1/webroot/css
  • 视图
  • 主题
  • store1
  • 视图(特定模板)
  • webroot(特定的css,字体等)

我对Laravel和React还很陌生,我现在正在寻找的是如何用React实现类似的东西:

  • 有一个默认的主题(将使用sass和bootstrap)
  • 根据所选主题加载特定的css和/或组件,如果特定的css /组件不存在,则加载默认值,主题专用于指向同一网站的URL。

欢迎任何帮助,谢谢
我读过很多关于react和主题的教程,样式化组件可能是一个提示,我发现大多是像亮/暗主题这样的主题切换器,但不确定这是我想要的。

yv5phkfx

yv5phkfx1#

currentThemeLink变量用于跟踪当前应用的主题的CSS文件。在添加新主题的CSS文件之前,代码会检查之前是否加载了主题。如果是,它将从文档中删除前一个链接标记。这可以确保一次只应用一个主题的CSS文件,并且在切换主题时正确处理清理。
请记住将/path-to-themes/替换为主题CSS文件的实际路径。

// Variable to store the reference to the currently loaded theme CSS file
let currentThemeLink = null;

function loadThemeCSS(themeName) {
  // Create a new link element for the selected theme
  const newThemeLink = document.createElement('link');
  newThemeLink.rel = 'stylesheet';
  newThemeLink.type = 'text/css';
  newThemeLink.href = `/path-to-themes/${themeName}.css`; // Replace with the actual path

  // If a theme was previously loaded, remove it before adding the new one
  if (currentThemeLink) {
    document.head.removeChild(currentThemeLink);
  }

  // Add the new theme's CSS file to the document
  document.head.appendChild(newThemeLink);

  // Update the reference to the current theme link
  currentThemeLink = newThemeLink;
}

// Example usage when the user selects a theme:
function handleThemeChange(themeName) {
  loadThemeCSS(themeName);
}

// Render your UI element for theme selection
<button onClick={() => handleThemeChange('theme-light')}>Light Theme</button>
<button onClick={() => handleThemeChange('theme-dark')}>Dark Theme</button>

相关问题