【JPCS独立出版】第三届能源与动力工程国际学术会议(EPE 2024)_艾思科蓝_学术一站式服务平台
更多学术会议请看:https://ais.cn/u/nuyAF3
引言
一、前端框架概述
二、React:灵活高效的组件化库
2.1 React简介
2.2 React的核心优势
2.3 React的代码示例
三、Vue:渐进式的JavaScript框架
3.1 Vue简介
3.2 Vue的核心优势
3.3 Vue的代码示例
四、Angular:功能全面的前端框架
4.1 Angular简介
4.2 Angular的核心优势
4.3 Angular的代码示例
五、框架对比与选择建议
5.1 框架对比
5.2 选择建议
六、更深入的框架特性与解析
6.1 React的深入解析
6.1.1 Hooks
代码示例:使用 useState 和 useEffect
import React, { useState, useEffect } from 'react';
function Counter() {
const [count, setCount] = useState(0);
useEffect(() => {
document.title = `You clicked ${count} times`;
});
return (
<div>
<p>You clicked {count} times</p>
<button onClick={() => setCount(count + 1)}>
Click me
</button>
</div>
);
}
export default Counter;
6.1.2 Context API
代码示例:使用 Context
// ThemeContext.js
import React, { createContext, useState } from 'react';
const ThemeContext = createContext({
theme: 'light',
toggleTheme: () => {},
});
export function ThemeProvider({ children }) {
const [theme, setTheme] = useState('light');
const toggleTheme = () => {
setTheme(theme === 'light' ? 'dark' : 'light');
};
return (
<ThemeContext.Provider value={{ theme, toggleTheme }}>
{children}
</ThemeContext.Provider>
);
}
export default ThemeContext;
// 使用 Context 的组件
function Button() {
return (
<ThemeContext.Consumer>
{({ theme, toggleTheme }) => (
<button onClick={toggleTheme} style={{ backgroundColor: theme === 'light' ? '#eee' : '#333', color: theme === 'light' ? '#333' : '#eee' }}>
Toggle Theme
</button>
)}
</ThemeContext.Consumer>
);
}
// 或者使用 Hooks (推荐)
function ThemedButton() {
const { theme, toggleTheme } = React.useContext(ThemeContext);
return (
<button onClick={toggleTheme} style={{ backgroundColor: theme === 'light' ? '#eee' : '#333', color: theme === 'light' ? '#333' : '#eee' }}>
Toggle Theme
</button>
);
}
6.2 Vue的深入解析
6.2.1 Vuex
代码示例:Vuex 基本使用
// store.js
import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex);
export default new Vuex.Store({
state: {
count: 0
},
mutations: {
increment(state) {
state.count++;
}
},
actions: {
incrementIfOddOnRootSum({ state, commit, rootState }) {
if ((state.count + rootState.otherCount) % 2 === 1) {
commit('increment');
}
}
}
});
<template>
<div>
<p>{{ count }}</p>
<button @click="increment">Increment</button>
</div>
</template>
<script>
export default {
computed: {
count() {
return this.$store.state.count;
}
},
methods: {
increment() {
this.$store.commit('increment');
}
}
}
</script>
6.2.2 Vue Router
代码示例:Vue Router 基本使用
6.3 Angular的深入解析
6.3.1 Angular Modules
代码示例:定义一个 Angular 模块
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { AppComponent } from './app.component';
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
6.3.2 Angular Forms
响应式表单示例:
import { Component } from '@angular/core';
import { FormControl, FormGroup } from '@angular/forms';
@Component({
selector: 'app-reactive-form',
template: `
<form [formGroup]="profileForm">
<input formControlName="firstName" placeholder="First name">
<input formControlName="lastName" placeholder="Last name">
<button type="submit">Submit</button>
</form>
`
})
export class ReactiveFormComponent {
profileForm = new FormGroup({
firstName: new FormControl(''),
lastName: new FormControl('')
});
}