建立好專案之後,刪掉 src 目錄下的檔案,按照以下結構建立目錄,根據具體專案情況進行更改
npm install antd -s
ant design 是深受人喜愛的企業級 ui 設計語言和 react 元件庫
npm install react-router-dom -s
使用路由進行不同頁面間的切換
使用示例:
reactdom.render(
, document.getelementbyid("root")
);
在routes/index.js
中,引入需要的元件並匯出路由配置物件
import register from "../pages/register/register";
import login from "../pages/login/login";
import main from "../pages/main/main";
export const routes = [
, ,
,];
npm install redux react-redux redux-thunk -s
npm install redux-devtools-extension -d
示例:
註冊
在自己想要使用 antd 的元件中可使用import {} from "antd"
即可引入元件樣式,任意使用
資料通過state
儲存,通過繫結輸入框onchange
事件更新資料
state = ;
handlechange = (name, value) => );
};
和註冊元件相同的方式完成登入元件
注意:註冊和登入元件中的路由跳轉使用this.props.history
中的replace()
或者push()
方法實現,區別是 replace 不能回退,push 可以回退
修改bin/www
中的埠號為 4000,避免與前端的監聽埠號 3000 衝突
npm install nodemon -d
安裝之後將package.json
中的scripts.start
改為nodemon ./bin/www
,啟動之後每次修改**儲存即可立即重啟
npm install mongoose blueimp-md5 -s
常見操作:s**e,find,findone,findbyidandupdate,delete(remove 已經過時)
blueimp-md5 庫用來對密碼進行 md5 加密,庫匯出的是函式,直接使用 blueimp-md5(password)即可返回加密結果
使用操作 mongodb 資料庫的 mongoose 模組向外暴露乙個資料庫操作的類,這樣在路由中如果需要運算元據庫只需要引入類直接使用
const mongoose = require("mongoose");
mongoose.connect("mongodb://localhost:27017/school-chat");
const connection = mongoose.connection;
connection.on("connected", () => );
const userschema = mongoose.schema(,
password: ,
type: ,
...});const usermodel = mongoose.model("user", userschema);
exports.usermodel = usermodel;
在routes/index.js
中編寫後端所有的路由,路由中返回的物件儲存在前端 ajax 請求的響應體中
註冊首先需要在資料庫中查詢使用者是否存在,不存在才新建一條文件
router.post("/register", (req, res) => = req.body;
usermodel.findone(, (err, user) => 」已存在` });
} else );
usermodel.s**e((err, user) => );
res.send( });
});}
});});
登入首先需要在資料庫中查詢使用者是否存在,存在才返回相應的資訊
router.post("/login", (req, res) => = req.body;
usermodel.findone(, filter, (err, user) => );
res.send();
} else );
}});
});
npm install axios -s
主流請求分為 get 請求和 post 請求,get 請求需要根據 data 物件拼接出請求的 url
export default function ajax(url = "", data = {}, type = "get") =$&`;
}if (querystr !== "") ?$`);
}} else
}
通過前面封裝的請求函式,將專案中所有用到的請求都封裝成函式在api/index.js
中
export const reqregister = (user) => ajax("/register", user, "post");
export const reqlogin = (username, password) => ajax("/login", , "post");
export const requpdate = (user) => ajax("/update", user, "post");
...
在redux/actions.js
中編寫多個 action creator:同步 action,非同步 action
export const register = (user) => = user;
if (!username)
if (password !== againpassword)
return async (dispatch) => );
const result = response.data;
if (result.code === 0) else
};};
在redux/reducers.js
中編寫所有的 reducer 函式,然後使用 combinereducers 函式結合起來暴露出去
function user(state = inituser, action) ;
case error_msg:
return ;
default:
return state;
}}export default combinereducers();
根據老的 user state 和指定的 action 返回新的 state
import thunk from "redux-thunk";
import from "redux-devtools-extension";
import reducers from "./reducers";
最後,在redux/store.js
中暴露編寫 redux 最核心部分,向外暴露 store 物件,**比較固定,在大部分專案中幾乎不變
登入和註冊點選傳送請求的時候會出現瀏覽器跨域報錯,意思是 3000 埠向 4000 埠傳送請求
乙個簡單的解決辦法是使用**:在package.json
中配置"proxy": "http://localhost:4000"
,意思是配置乙個在 3000 埠可以向 4000 埠**請求的**,瀏覽器識別不出**
將 redux 作用在在註冊和登入元件上:
export default connect(
(state) => (),
)(register);
其中 user 中的狀態可以通過this.props.user
獲取,比如this.props.user.msg
,然後就可以將 redux 中的狀態展現在元件中
註冊操作可使用this.props.register(this.state)
進行登入
全棧工程師
全棧工程師,也叫全端工程師,英文full stack developer。是指掌握多種技能,並能利用多種技能獨立完成產品的人。web前端也遠遠不是從前的切個圖用個jquery上個ajax相容各種瀏覽器那麼簡單了。現代的web前端,你需要用到模組化開發 多屏相容 mvc,各種複雜的互動與優化,甚至你需...
全棧工程師
全棧工程師 價值1.全域性性思維 2.溝通成本 專案越大,溝通成本越高,做過專案管理的都知道,專案中的人力是1 1 2的,人越多效率越低。因為溝通是需要成本的,不同技術的人各說各話,前端和後端是一定會掐架的。每個人都會為自己的利益而戰,毫不為已的人是不存在的。而全棧工程師的成本幾乎為零,因為各種技術...
關於全棧工程師
facebook前些年傳出一種現象,他們鼓勵工程師成為全棧式的,乙個人從設計到開發運維。不知道他們執行的力度如何,有沒有全力推廣。但fb畢竟是大公司,不論其好壞,其倒是在網際網路上掛起了一陣 全棧 風,很多任務程師跟風而動,這一點,fb倒是挺成功的。我個人的看法,我對全棧工程師不是太認可,至少不能大...