webpack4를 사용하여 반응 프로젝트 프레임워크를 구축하는 방법
이 글은 webpack4를 사용하여 React 프로젝트 프레임워크를 구축하는 방법을 주로 소개합니다. 이제 필요한 모든 친구들과 공유할 수 있습니다.
소개#🎜 🎜#
프레임워크 소개, webpac을 사용하여 구축된 반응형 단일 페이지 애플리케이션 및 antd 통합. webpack-dev-server를 사용하여 로컬 서비스를 시작하고 핫 업데이트를 추가하여 개발 및 디버깅을 촉진하세요. 코드 커팅 및 레이지 로딩을 위해 번들 로더를 사용하세요 cli를 사용하지 않고 수동으로 빌드되었으며 많은 주석이 초보자가 웹팩을 이해하고 배우는데 적합하며 반응 프로젝트에 대한 심층적인 이해를 갖습니다
git clone https://gitee.com/wjj0720/react-demo.git
cd react-demo
yarn
yarn start
로그인 후 복사
Packagegit clone https://gitee.com/wjj0720/react-demo.git cd react-demo yarn yarn start
yarn build
로그인 후 복사
디렉토리 구조yarn build
+node_modules
-src
+asset
+Layout
+pages
+redux
+utils
+app.js
+index.html
+index.js
.babelrc
package.json
postcss.config.js
webpack.config.js //webpack 配置
로그인 후 복사
bundle-loader 지연 로딩은 +node_modules -src +asset +Layout +pages +redux +utils +app.js +index.html +index.js .babelrc package.json postcss.config.js webpack.config.js //webpack 配置
// webpack.config.js 配置
module: {
rules: [
{
test: /\.bundle\.js$/,
use: {
loader: 'bundle-loader',
options: {
name: '[name]',
lazy: true
}
}
}
]
}
// 页面引入组件
import Home from "bundle-loader?lazy&name=[name]!./Home";
// 组件使用 因为组件懒加载 是通过异步的形式引入 所以不能再页面直接以标签的形式使用 需要做使用封装
import React, {Component} from 'react'
import { withRouter } from 'react-router-dom'
class LazyLoad extends Component {
state = {
LoadOver: null
}
componentWillMount() {
this.props.Loading(c => {
this.setState({
LoadOver: withRouter(c.default)
})
})
}
render() {
let {LoadOver} = this.state;
return (
LoadOver ? <LoadOver/> : <p>加载动画</p>
)
}
}
export default LazyLoad
// 通过封装的懒加载组件过度 增加加载动画
<LazyLoad Loading={Home} />
로그인 후 복사
를 사용합니다. 라우팅 구성// webpack.config.js 配置 module: { rules: [ { test: /\.bundle\.js$/, use: { loader: 'bundle-loader', options: { name: '[name]', lazy: true } } } ] } // 页面引入组件 import Home from "bundle-loader?lazy&name=[name]!./Home"; // 组件使用 因为组件懒加载 是通过异步的形式引入 所以不能再页面直接以标签的形式使用 需要做使用封装 import React, {Component} from 'react' import { withRouter } from 'react-router-dom' class LazyLoad extends Component { state = { LoadOver: null } componentWillMount() { this.props.Loading(c => { this.setState({ LoadOver: withRouter(c.default) }) }) } render() { let {LoadOver} = this.state; return ( LoadOver ? <LoadOver/> : <p>加载动画</p> ) } } export default LazyLoad // 通过封装的懒加载组件过度 增加加载动画 <LazyLoad Loading={Home} />
#🎜🎜 #프레임워크는 모듈에 따라 구분됩니다. 페이지 폴더 아래 Route.js는 모듈
// 通过require.context读取模块下路由文件 const files = require.context('./pages', true, /route\.js$/) let routers = files.keys().reduce((routers, route) => { let router = files(route).default return routers.concat(router) }, []) // 模块路由文件格式 import User from "bundle-loader?lazy&name=[name]!./User"; export default [ { path: '/user', component: User }, { path: '/user/:id', component: User } ]
redux 사용법 소개
// ---------创建 -------- // 为了不免action、reducer 在不同文件 来回切换 对象的形式创建 // createReducer 将书写格式创建成rudex认识的reducer export function createReducer({state: initState, reducer}) { return (state = initState, action) => { return reducer.hasOwnProperty(action.type) ? reducer[action.type](state, action) : state } } // 创建页面级别的store const User_Info_fetch_Memo = 'User_Info_fetch_Memo' const store = { // 初始化数据 state: { memo: 9, test: 0 }, action: { async fetchMemo (params) { return { type: User_Info_fetch_Memo, callAPI: {url: 'http://stage-mapi.yimifudao.com/statistics/cc/kpi', params, config: {}}, payload: params } }, ... }, reducer: { [User_Info_fetch_Memo] (prevState = {}, {payload}) { console.log('reducer--->',payload) return { ...prevState, memo: payload.memo } }, ... } } export default createReducer(store) export const action = store.action // 最终在模块界别组合 [当然模块也有公共的数据(见Home模块下的demo写法)] import {combineReducers} from 'redux' import info from './Info/store' export default combineReducers({ info, 。。。 }) // 最终rudex文件夹下的store.js 会去取所有模块下的store.js 组成一个大的store也就是我们最终仓库 // --------使用------ // 首先在app.js中将store和app关联 import { createStore } from 'redux' import { Provider } from 'react-redux' // reducer即我们最终 import reducer from './redux/store.js' // 用户异步action的中间件 import middleware from './utils/middleware.js' let store = createStore(reducer, middleware) <Provider store={store}> 。。。 </Provider> // 然后组件调用 只需要在组件导出时候 使用connent链接即可 import React, {Component} from 'react' import {connect} from 'react-redux' // 从页面级别的store中导出action import {action} from './store' class Demo extends Component { const handle = () => { // 触发action this.props.dispatch(action.fetchMemo({})) } render () { console.log(this.props.test) return <p onClick={this.handle}>ss</p> } } export default connect(state => ({ test: state.user.memo.test }) )(demo)
About redux middleware
// 与其说redux中间件不如说action中间件 // 中间件执行时机 即每个action触发之前执行 // import { applyMiddleware } from 'redux' import fetchProxy from './fetchProxy'; // 中间件 是三个嵌套的函数 第一个入参为整个store 第二个为store.dispatch 第三个为本次触发的action // 简单封装的中间件 没有对请求失败做过多处理 目的在与项错误处理机制给到页面处理 const middleware = ({getState}) => next => async action => { // 此时的aciton还没有被执行 const {type, callAPI, payload} = await action // 没有异步请求直接返回action if (!callAPI) return next({type, payload}) // 请求数据 const res = await fetchProxy(callAPI) // 请求数据失败 提示 if (res.status !== 200) return console.log('网络错误!') // 请求成功 返回data return next({type, payload: res.data}) } export default applyMiddleware(middleware)
D3.js를 사용하여 토폴로지 맵을 구현하는 방법
# 🎜🎜 #Vue 프로젝트에 동적 브라우저 헤더 제목을 추가하는 방법
위 내용은 webpack4를 사용하여 반응 프로젝트 프레임워크를 구축하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

호출 방법: 1. 클래스 구성 요소의 호출은 React.createRef(), ref의 기능적 선언 또는 사용자 정의 onRef 속성을 사용하여 구현할 수 있습니다. 2. 함수 구성 요소 및 Hook 구성 요소의 호출은 useImperativeHandle 또는 forwardRef를 사용하여 구현할 수 있습니다. 하위 구성 요소 참조가 구현되었습니다.

React 커스텀 Hooks는 재사용 가능한 함수에 컴포넌트 로직을 캡슐화하는 방법으로, 클래스를 작성하지 않고도 상태 로직을 재사용할 수 있는 방법을 제공합니다. 이 기사에서는 캡슐화 후크를 사용자 정의하는 방법을 자세히 소개합니다.

반응에서 div 높이를 설정하는 방법: 1. CSS를 통해 div 높이를 구현합니다. 2. 상태에서 객체 C를 선언하고 객체에 변경 버튼의 스타일을 저장한 다음 A를 가져오고 C에서 "marginTop"을 재설정합니다. .그것은 캔이다.

React 소스 코드를 디버깅하는 방법은 무엇입니까? 다음 글에서는 다양한 도구에서 React 소스코드를 디버깅하는 방법에 대해 이야기하고, Contributors, create-react-app, vite 프로젝트에서 실제 React 소스코드를 디버깅하는 방법을 소개하겠습니다. 모두에게 도움이 되길 바랍니다!

React가 애플리케이션 구축을 위한 첫 번째 선택으로 Vite를 사용하지 않는 이유는 무엇입니까? 다음 기사에서는 React가 Vite를 기본 권장 사항으로 권장하지 않는 이유에 대해 설명합니다. 이것이 도움이 되기를 바랍니다.

ReactRedux 튜토리얼: Redux를 사용하여 프런트엔드 상태를 관리하는 방법 React는 사용자 인터페이스 구축을 위한 매우 인기 있는 JavaScript 라이브러리입니다. 그리고 Redux는 애플리케이션 상태를 관리하기 위한 JavaScript 라이브러리입니다. 함께 사용하면 프런트엔드 상태를 더 잘 관리할 수 있습니다. 이 글에서는 Redux를 사용하여 React 애플리케이션에서 상태를 관리하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 1. Redux 설치 및 설정 먼저 Re를 설치해야 합니다.

이 글에서는 일상적인 개발에 자주 사용되는 훌륭하고 실용적인 7가지 React 구성 요소 라이브러리를 공유하겠습니다. 와서 모아서 사용해 보세요!

이 글은 더 간단한 React 코드를 작성하는 데 도움이 되는 10가지 실용적인 팁을 공유할 것입니다.
