摘要:項目問題總結這個項目,很簡單,前端使用,后端使用進行開發(fā)。方便移動端開發(fā)。當動畫結束后,有一個鉤子函數(shù)可以使用其他一些功能組件,都是自己嘗試去編寫的,像日歷組件組件組件等。版本的,是沒有任何的鉤子函數(shù),我就感覺懵逼了。。。
todo-list 項目問題總結
這個 todo-list 項目,很簡單,前端使用 react,后端 nodejs 使用 koa2 進行開發(fā)。數(shù)據庫使用 Mysql。之所以要選擇這些框架、數(shù)據庫,是因為我都不會這些技術,為了學習,所以就使用這些技術進行開發(fā)。
在這次的小項目開發(fā)中,大概用了1個月的時間吧,平時有空就開始開發(fā)或者學習。
而這篇文章,主要是記錄了在學習開發(fā)過程,遇到的一些問題,是如何解決的。
使用的框架、庫 前端項目腳手架是用 create-react-app 生成的
react
react-router
redux
后端后端用的是 nodejs
koa2
mysql
前端開發(fā)遇到的問題 create-react-app css module 問題用 create-react-app 生成的項目后,再用 npm run eject 把 webpack 配置文件生成出來(因為要修改配置)。原本打算使用 css module + scss 進行開發(fā)的。但是我在配置完 webpack 之后,css module 有個問題解決不了
通過 composes 引用的類,在源文件使用了變量或者 @include 都是沒有效果的,還有使用了 postcss-px2rem 這個插件,也是無法轉成 rem 的。
不知道是我配置哪里出現(xiàn)了問題,所以就暫時使用 scss 進行開發(fā),后面再找下有沒有現(xiàn)成的配置,看看是如何做的。
其他添加的配置只是簡單得添加了 scss-loader 和 postcss-px2rem 插件進行使用。
使用 postcss-px2rem,在 css 中寫 px,會根據配置參數(shù),轉譯后變成 rem。方便移動端開發(fā)。
其他暫時沒有什么大的問題,create-react-app 和 vue-cli 相比,功能也挺完整的。但是開發(fā)和打包的是兩個配置文件,其中公共部分沒有抽出來,感覺這點就比 vue-cli 不好了。
react因為我有 vue 的基礎,所以感覺學習 react 的時候并不覺得很難,當然還沒真正在工作項目中使用 react 開發(fā),所以很多問題都沒遇到。
react 是用 jsx 進行編寫模板的。我自己從 vue 的 template 轉到 react 的 jsx 感覺還是沒什么問題。
react 自帶的 api 并不多,很多都要去看看有什么庫可以用,而選擇庫的時候,要看看其他開發(fā)者的介紹、評價等,再去選擇使用,還有 github 的 star 數(shù)。
動畫庫選擇像要實現(xiàn)動畫效果時,vue 可以直接自帶的
test
再編寫 css 動畫類就好了。而 react 可以找一些庫去實現(xiàn),沒有什么約束,選擇更多。
我這里就使用了 react-motion 這個動畫庫??梢詫崿F(xiàn)更多物理效果的的動畫。
import {Motion, spring} from "react-motion"; // In your render...{value => {value.x}}
官方 demo 看起來也感覺挺簡單的。用起來感覺還行。
當動畫結束后,有一個鉤子函數(shù)可以使用 onRest
其他一些功能組件,都是自己嘗試去編寫的,像日歷組件、picker 組件、toast 組件等。因為項目簡單,所以需要的組件不多。
react-router剛開始看的時候,知道 react-router (后面直接說 router 了) v4 版本和之前的版本區(qū)別有點大。然后選擇了 v4 版本。v4 版本的 router,是沒有任何的鉤子函數(shù),我就感覺懵逼了。。。攔截器功能要怎么實現(xiàn)。。。路由權限要怎么實現(xiàn)。一個 2.8W star 數(shù)的庫,肯定有解決方法。
關于 React Router 4 的一切
大家可以看下上面這篇文章,幫助很大。
這個其實挺簡單的,想一下就可以了,在每個 Route 組件,包多一層父級組件,每次匹配 Route 時,都要先經過那層父級組件,判斷要輸出什么。
const AuthRoute = ({ component: Component, redirect, loginStatus, ...rest }) => (( loginStatus ? ( ) : ( ) )} /> )
根據傳進去的 loginStatus ,判斷是要重定向還是輸出原組件。這種做法就是“高階組件”,接受一個組件參數(shù),返回一個組件。
使用的時候就是這樣:
然而麻煩的是,只要涉及到要權限判斷的,就要用這層組件包裹。。。沒用到的就不需要。然而大部分頁面都是需要的。
react-router-dom 庫是有依賴 history 這個庫的。在組件里,用 withRouter (這個組件是在 react-router-dom 里面的)包住當前組件,就會在 props 出現(xiàn) histroy、location、match 這三個對象。history 擁有 push、replace、go 等等多種路由操作的方法。
import React, { Component } from "react" import { withRouter } from "react-router-dom" class Com extends Component { constructor(props) { super(props) // this.props.history.... } render() { return () } } export default withRouter(Com)
如果我在純 js 里面,要如何調整?
請求 api 我是用 axios,我想在 axios 攔截器里,當判斷后端返回你沒有登錄,就要自動跳去登錄頁。
網上有個教程是,使用 history 庫,實例化一個 hisotry 對象,就可以 push 、replace 等。但是那個好像是在 v3 之前的版本才有效。在 v4 中,路由的 url 是變化了,但是內容沒有變。
react-router v4 使用 history 控制路由跳轉
這個大家可以看下這位前輩寫的方法。前兩種是在組件里使用的。第三種方法是:
import { Router, Link, Route } from "react-router-dom" import history from "./history" ReactDOM.render(, document.getElementById("root"), ) ...
把 history 傳到 Router 組件里。然后其他地方就可以使用了。但這里有個問題,Router 組件是無法用 BrowserRouter 其他的一些功能,像 basename。這個感覺還是很必要,Router 組件是沒有這個屬性的選項的。我現(xiàn)在做的項目,基本上每個都要配置 basename(用的是 vue 開發(fā)的項目)。雖然可以用其他一些方法去添加這個 basename,但覺得很麻煩。
然后我就看了第四種方法。。。直接從 react-router-dom 里面的 BrowserRouter 源碼里 copy 下面,自己封裝了一個組件:
import React from "react" import { setHistory } from "@/utils/history" import { createBrowserHistory as createHistory } from "history" import { Router } from "react-router-dom" class BrowserRouter extends React.Component { history = createHistory(this.props) render() { setHistory(this.history) return} } export default BrowserRouter
其實 Router 組件,加上 history 對象和 children ,就是一個 BrowserRouter。在里面生成 history 對象,我自己就緩存起來。哪里要用,我就直接調用它就好了。
然后使用這個“假的” BrowserRouter,其他功能和“真的”是一樣的。在里面加 basename 也是可以的。
這樣我在 axios 里就可以跳轉路由
import axios from "axios" import { getHistory } from "@/uitls/history" axios("http://xxxx.com/api").then(res => { if (res.code === 500) { getHistory().push("/login") } })
上面就是我在 react-router 暫時遇到的問題。
reduxredux 也沒什么好說的,教程網上搜搜或者看文檔就好了。 redux 剛開始用的時候,感覺有別扭。。。轉不過去,只能照搬復制粘貼用??赡苡弥弥?,才明白,額。。原來是這么回事,然后再去刷文檔。。。
主要是如何在 axios 里,更新 store 的數(shù)據。這個也很簡單
store.dispatch(setToast({ status: true, title: "請重新登錄" }))react 和 vue 開發(fā)時的區(qū)別
感覺做同樣的事情,react 需要寫的代碼稍微會多點,感覺也麻煩點,不知道是不是還沒熟悉,用 vue 感覺寫起來很爽。
vue 提供的功能比較全面,像 computed, watch 這些,react 的話好像是沒有提供的?react 更多需要找現(xiàn)成的庫。不過自從學了 react,es6 也要更加熟練了。。。
前端總結整個前端開發(fā)起來,其實還好。一些公共處理的問題,在后面都解決到了。但還是要看看其他項目, 開發(fā)是如何做好約束,組件是如何分類等等。
后端開發(fā)遇到的問題相對前端,后端基礎等于沒有,靠看文檔、搜索、問同事,從而解決一些問題。
后端主要要做的是提供接口,進行簡單的增刪改查。數(shù)據庫使用 Mysql。nodejs 框架就使用 koa2(因為沒學過,就決定用它了)。
項目使用 koa2-generator 生成的。開箱既用。再自己添加一些庫就好了。
連接 mysql 的話,用 npm 的一個 mysql 包就好了。
其他的話,后續(xù)更新吧~~
最后附上 項目 github 地址
還有體驗地址
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://systransis.cn/yun/93593.html
摘要:盡管現(xiàn)在的已不再那么流行,但的設計思想還是非常值得致敬和學習的,特別是的插件化。那么,如何解決我們回顧下的生命周期,父組件傳遞到子組件的的更新數(shù)據可以在中獲取。當然,如何設計取決于你自己的項目,正所謂沒有最好的, 作者:曉冬本文原創(chuàng),轉載請注明作者及出處 如今的 Web 前端已被 React、Vue 和 Angular 三分天下,一統(tǒng)江山十幾年的 jQuery 顯然已經很難滿足現(xiàn)在的開...
摘要:因為其組件只是根據提供的及屬性,生成動畫的數(shù)據,業(yè)務應用中拿到生成的數(shù)據后根據需要添加需要動畫的組件樣式。除了上述簡單的動畫應用,在復雜動畫的實現(xiàn)方面,表現(xiàn)非常優(yōu)越。 WEB應用中動畫很重要 不管是web應用還是原生應用,也不論是PC端應用還是移動端應用,動畫都扮演了一個重要的角色。 盡管動畫并不會添加應用的實際動能,但一個好的動畫,一個流暢且優(yōu)雅,選擇在恰當時機出現(xiàn)的動畫,能為應用增...
摘要:引言是用于構建基于瀏覽器的復雜應用的下一代框架。它涵蓋了的一些基本概念,包括組件模型服務管道傳入傳出以及事件播散等使用方法,并介紹了項目的基本組織結構等。用于雙向綁定,使用來定義,專門用于定義雙向綁定。 引言 Angular2 是 Google 用于構建基于瀏覽器的復雜應用的下一代 MV* 框架。該項目是我學習 Angular2 的入門項目,我覺得它很友好地表達了 Angular2 的...
摘要:最近在研究的相關知識,最好的學習方法莫過于自己開發(fā)一個,這樣帶著問題來學習,進步自然飛速。在首頁里,我們會用寫一個導航,通過的路由導航到不同的應用。我們在文件夾里創(chuàng)建一個新的組件。 最近在研究vue的相關知識,最好的學習方法莫過于自己開發(fā)一個SPA,這樣帶著問題來學習,進步自然飛速。于是邊查邊寫差不多花了2周寫完了一個todo-list,功能不夠完備,但是麻雀雖小,卻也是五臟俱全,基本...
摘要:而且此時我們注意到其實沒有任何一個地方目前還需引用了,這就是說我們可以安全地把從組件中的修飾符中刪除了。 第一節(jié):Angular 2.0 從0到1 (一)第二節(jié):Angular 2.0 從0到1 (二)第三節(jié):Angular 2.0 從0到1 (三) 作者:王芃 [email protected] 第四節(jié):進化!模塊化你的應用 一個復雜組件的分拆 上一節(jié)的末尾我偷懶的甩出了大量代碼,可能...
閱讀 1863·2021-11-25 09:43
閱讀 1504·2021-09-02 15:21
閱讀 3472·2019-08-30 15:52
閱讀 1511·2019-08-30 12:48
閱讀 1308·2019-08-30 10:57
閱讀 2939·2019-08-26 17:41
閱讀 688·2019-08-26 11:59
閱讀 1379·2019-08-26 10:41