React Material Theme Chooser

  1. Вы можете просто создать папку с именем data в корневой папке с кодом VS.
  2. После запуска файлы со стандартными настройками будут созданы в папке data.
  3. Затем вы можете просто скопировать настройки из папки %AppData%\Code\User в папку data\user-data\User.
  4. Чтобы перенести уже установленные расширения, скопируйте содержимое папки %HomePath%\.vscode\extensions в папку data\extensions.
0
задан user3187715 19 January 2019 в 12:42
поделиться

1 ответ

Вам просто нужно сохранить атрибуты, которые вы разрешаете пользователю изменять / указывать. Например, вы можете позволить им выбрать только основной и дополнительный цвет. Затем вы должны сохранить эти две части информации в вашей БД и затем воссоздать тему, используя createMuiTheme.

Вот пример кода, демонстрирующего это:

import React from "react";
import ReactDOM from "react-dom";

import CssBaseline from "@material-ui/core/CssBaseline";
import AppBar from "@material-ui/core/AppBar";
import Button from "@material-ui/core/Button";
import { createMuiTheme, MuiThemeProvider } from "@material-ui/core/styles";

const themeDB = {
  a: {
    primaryColor: "#0f0",
    secondaryColor: "#f0f"
  },
  b: {
    primaryColor: "#ff0",
    secondaryColor: "#0ff"
  }
};
const createThemeFromThemeDBEntry = themeDBEntry => {
  return createMuiTheme({
    palette: {
      primary: {
        main: themeDBEntry.primaryColor
      },
      secondary: {
        main: themeDBEntry.secondaryColor
      }
    }
  });
};
class App extends React.Component {
  constructor(props) {
    super(props);
    this.state = { currentTheme: createMuiTheme() };
  }
  switchToThemeA = () => {
    const themeA = createThemeFromThemeDBEntry(themeDB.a);
    this.setState({ currentTheme: themeA });
  };
  switchToThemeB = () => {
    const themeB = createThemeFromThemeDBEntry(themeDB.b);
    this.setState({ currentTheme: themeB });
  };
  useDefaultTheme = () => {
    this.setState({ currentTheme: createMuiTheme() });
  };
  render() {
    return (
      <>
        <CssBaseline />
        <MuiThemeProvider theme={this.state.currentTheme}>
          <AppBar position="static">AppBar using Primary Color</AppBar>
          <AppBar position="static" color="secondary">
            AppBar using Secondary Color
          </AppBar>
          <br />
          <Button
            onClick={this.switchToThemeA}
            variant="contained"
            color="primary"
          >
            Use Theme A
          </Button>
          <Button
            onClick={this.switchToThemeB}
            variant="contained"
            color="secondary"
          >
            Use Theme B
          </Button>
          <Button onClick={this.useDefaultTheme} color="secondary">
            Use Default Theme
          </Button>
        </MuiThemeProvider>
      </>
    );
  }
}

const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);

Edit oozp6kqkq6

0
ответ дан Ryan Cogswell 19 January 2019 в 12:42
поделиться
Другие вопросы по тегам:

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