Reactjs ، واجهة المستخدم المادية مع JSS. دليل قصير

يوم جيد ، هبر!

لذا ، فإن واجهة المستخدم المادية هي إطار عمل شركة ReaJS الذي يوفر حلولًا جاهزة من Google لتطوير ويب سريع وبسيط إلى حد ما.

Material-UI هي مكتبة كبيرة إلى حد ما ، حيث يكون الجزء الرئيسي من مكونات التفاعل والتصميم هو @ material-ui / core (يجب أن يكون الهدف من استخدامه مشروعًا كبيرًا إلى حد ما).

لا يشمل هذا البرنامج التعليمي الاستخدام المتقدم لواجهة مستخدم المواد. هذا دليل صغير لمكونات التصميم.

إن استخدام مكونات المواد ليس صعبًا حقًا ، ولكن هناك فروق دقيقة في استخدام التصميم. سيتم مناقشة هذا في الواقع.

خذ بعين الاعتبار ما يلي


  1. JSS وقليلا عن بناء الجملة ؛
  2. أسلوب تفاعل الطبقة ، مكونات المواد ؛
  3. تصميم الوظيفية باستخدام خطافات تفاعلية ، مكونات مادية ؛
  4. التصميم من خلال تفاعل النمط ، المكونات المادية ؛
  5. مزود الموضوع ؛
  6. تجاوز مكونات المواد ؛

قطة!


1. JSS وقليلا عن بناء الجملة


JSS (مكتبة) - تصميم css بلغة Javascript بأسلوب تعريفي يزن 6 كيلوبايت ، باستثناء تثبيت المكونات الإضافية. لا يتم تصنيف JSS في نمط مضمن ويمكن إعادة استخدامه وتجنب التعارضات من خلال إنشاء أسماء فئة فريدة. لديه القدرة على العمل من خلال الخادم في nodejs وله الامتداد [.js]. في jss لا يوجد قيود على تعيين أنماط المحددات الزائفة أو العناصر الزائفة وما شابه ذلك. موصوفة بواسطة jss بأسلوب camelCase. واحدة من الميزات الرئيسية ل jss هي إمكانية اتباع نهج معماري في وصف الأنماط.

نعم ، ويستخدم هذا الشيء في واجهة المستخدم المادية مثل دلالات.

لبدء استخدام jss ، تحتاج إلى استدعاء طريقته الخاصة ، بعد أن ألغيت ككائن من الأنماط كمعلمة ، والتي ستعيد وظيفة ، عن طريق الاتصال الذي سنحصل عليه من فئات فئات jss ، على سبيل المثال:

/ src / components / JssComponent
JssComponent.js


import React from "react";

import useStyles from "./style";

export default function JssComponent() {
  //      jss
  const classes = useStyles();

  return (
    <div className={classes.root}>
      <h1>That's JssComponent</h1>
      <h2 className="basic_h2">I use JSS</h2>
      <div className={classes.content_div}>
        Any Text
      </div>
    </div>
  );
}

style.js

//     ,        jss
import { createUseStyles } from "react-jss";

const rootStyle = {
  width: 400,
  border: "1px solid grey",
  margin: "0px auto",
  padding: 15
};

const fontStyle = {
  fontWeight: "bold",
  fontStyle: "italic"
};

const useStyles = createUseStyles({
  root: {
    ...rootStyle,
    "& h1": {
      textAlign: "center",
      color: "purple"
    },
    "& .basic_h2": {
      textAlign: "right",
      color: "green",
      cursor: "pointer",
      "&:hover": {
        color: "purple"
      }
    }
  },
  content_div: {
    textAlign: "justify",
    ...fontStyle
  }
});

export default useStyles;

2. رد فعل فئة التصميم ، مكونات المواد


رد الفعل لم تتخلى عن دعم لكتابة واجهات على الفصول الدراسية. تُستخدم الأنماط التالية في مكونات مواد الفئة:

/ src / components / ClassComponent
ClassComponent.js


import React from "react";
import { withStyles } from "@material-ui/core/styles";
import Button from "@material-ui/core/Button";

import styles from "./style";

class ClassComponent extends React.Component {
  render() {
    const { classes } = this.props;

    return <Button className={classes.button}>ClassComponent</Button>;
  }
}

//      
export default withStyles(styles)(ClassComponent);

style.js

//  js    
const styles = {
    button: {
      backgroundColor: "grey",
      border: 0,
      borderRadius: 3,
      boxShadow: "0 3px 5px 2px",
      color: "black",
      height: 48,
      padding: "0 30px",
      margin: 10
    }
  };
  
  export default styles;

3. تصميم الوظيفية باستخدام خطافات تفاعلية ، مكونات مادية


بدءًا من إصدار 16.8 من React ، ظهرت فرصة جديدة في كتابة الواجهات على الخطافات:

/ src / components / HookComponent
HookComponent.js


import React from "react";
import Button from "@material-ui/core/Button";

import useStyles from "./style";

const HookComponent = props => {
  //     
  const classes = useStyles();

  return <Button className={classes.button}>HookComponent</Button>;
};

export default HookComponent;

style.js

//     ,         
import { makeStyles } from "@material-ui/core/styles";

const useStyles = makeStyles({
  button: {
    backgroundColor: "grey",
    border: 0,
    borderRadius: 3,
    boxShadow: "0 3px 5px 2px",
    color: "black",
    height: 48,
    padding: "0 30px",
    margin: 10
  }
});

export default useStyles;

4. التصميم مع رد فعل StyledComponent ، المكونات المادية


StyledComponent - مبدأ مكونات التصميم بدون طريقة تُرجع دالة لتوليد الفئات.

/ src / components / StyledComponent
StyledComponent.js


import React from "react";
//       
import { styled } from "@material-ui/core/styles";
//    
import Button from "@material-ui/core/Button";

import styles from './style';

//     
const ButtonComponent = styled(Button)({ ...styles });

export default function StyledComponent() {
  return <ButtonComponent>StyledComponent</ButtonComponent>;
}

style.js

//  js    
const styles = {
    backgroundColor: "grey",
    border: 0,
    borderRadius: 3,
    boxShadow: "0 3px 5px 2px",
    color: "black",
    height: 48,
    padding: "0 30px",
    margin: 10
  };

  export default styles;

5. مزود الموضوع.


Theming هو توفير أنماط افتراضية لمشروع ، أو جزء منه ، بالنظر إلى تداخل المكونات ، تشبه المفاهيمية السياق في React. يحتوي Material-ui بالفعل على كائن افتراضي جاهز للنسق الافتراضي ، ولكن يمكنك إنشاؤه بنفسك لتناسب احتياجاتك ، بعد إتاحته مسبقًا من خلال الموفر ، وبهذه الطريقة ستوفر وظيفة مع كائن السمة كوسيطة ، للطرق المادية لكتابة الأنماط ، على سبيل المثال :

/ src / components
App.js


import React from 'react';
import { ThemeProvider } from "@material-ui/core/styles";

import  ThemedComponent from './ThemedComponent/ThemedComponent';
import theme from './theme';

function App() {
  return (
        <ThemeProvider theme={theme}>
          < ThemedComponent />  
        </ThemeProvider>
  );
}

export default App;

theme.js

//  js   
const theme = {
    button: {
      backgroundColor: "grey",
      border: 0,
      borderRadius: 3,
      boxShadow: "0 3px 5px 2px",
      color: "black",
      height: 48,
      padding: "0 30px"
    }
  };

  export default theme;

/ src / components / ThemedComponent
ThemedComponent.js


import React from "react";

import useStyles from "./style";

const ThemedComponent = props => {
    //     
  const classes = useStyles();

  return <button className={classes.button}>ThemedComponent</button>;
};

export default ThemedComponent;

style.js

//      theme
import { makeStyles } from "@material-ui/core/styles";

const useStyles = makeStyles(theme => {
  return {
    button: { ...theme.button, margin: 10 }
  };
});

export default useStyles;

6. تجاوز مكونات المواد


في ui material ، يحتوي كل مكون بالفعل على الأنماط المقابلة ، أي أن استيراد أي مكون مادة سيوفر مكونًا مصممًا بالفعل مع الفئات المتاحة. إنشاء موضوع باستخدام API المادي خاص - createMuiTheme لا يمكن أن توفر سوى موضوع، ولكن أيضا تجاوز الصفوف الافتراضية المحددة من المكونات المادية الخاصة باستخدام يتجاوز الممتلكات ، على سبيل المثال:

/ SRC / مكونات
App.js


import React from 'react';
import { ThemeProvider } from "@material-ui/core/styles";

import CreatedThemeComponent from './CreatedThemeComponent/CreatedThemeComponent';
import createdTheme from './createdTheme';

function App() {
  return (
        <ThemeProvider theme={createdTheme}>
          <CreatedThemeComponent />  
        </ThemeProvider>
  );
}

export default App;

/ SRC / مكونات
createdTheme.js


//          material  
import { createMuiTheme } from "@material-ui/core/styles";

const createdTheme = createMuiTheme({
    //  
    overrides: {
      MuiButton: {
        root: {
          color: "red",
          border: "1px solid grey",
          margin: 10
        }
      }
    }
  });
  
export default createdTheme;

/ src / components / CreatedThemeComponent
CreatedThemeComponent.js


import React from "react";
import { Button } from "@material-ui/core";

const CreatedThemeComponent = props => {
  return <Button>CreatedThemeComponent</Button>;
};

export default CreatedThemeComponent;

ملخص:

  • JSS وميزاته ؛
  • يتفاعل تصميم JSS ، ومكونات المواد من خلال واجهة مستخدم المواد api ؛

كود المصدر: https://gitlab.com/ImaGadzhiev/material-style-components

All Articles