通過一段時間的react開發,本身總結了一些小習慣,自動構建webpackreact
一個組件一個文件夾,可讀性高,結構清晰webpack
文件夾:Danamic(組件首字母大寫) index.jsx style.less data.js
引用 :web
import Danamic from './Danamic'
webpack能自動識別文件夾內index文件 (index首字母只能小寫)ajax
React 的 JSX 裏約定分別使用首字母大、小寫來區分本地模塊的類和 HTML 標籤。json
import React from 'react' import { render } from 'react-dom' function isEmpty(obj) { return obj === null || obj === undefined } export default ({ type, clickFn }) => { let text = '' switch ((isEmpty(type) ? '' : type).toString()) { case "2": text = '沒有更多了' break case "1": text = '點擊加載更多' break case "0": text = '網絡加載問題,請稍後重試' break } return <div className="warning" onClick={clickFn}>{text}</div> }
沒有性能上的差異,就是實現一樣的功能,能夠少寫下面這些代碼segmentfault
export default class extends React.Component { constructor(props) { super(props) } }
constructor(props) { super(props) } static propTypes = { info: React.PropTypes.object.isRequired, loginSuccess: React.PropTypes.func.isRequired, }
加上propTypes 能一眼看出父組件傳的參數以及類型promise
data.js
import React from 'react' import ajax from 'ajax-promise-simple' import loadPage from '@/common/loadPage' module.exports = { //獲取所有評論 async getList(params) { let result = await ajax.getJSON('/amsquare/detailcomment', params) return { succsess: result.code === 0, data: result.data ? result.data : [] } }, //點贊 async zanClick(params) { let result = await ajax.getJSON(`/amsquare/addcmtpraise`, params) // console.log(params) return { succsess: result.code === 0 } }, //刪除動態 async removeDT(params) { let result = await ajax.getJSON('/amsquare/deldymanic', params) if (result.code === 0) { const url = `http://wen.58.com/amsquare/main?from=weijiaoliu_nav`; const browser = window.____json4fe.browser; loadPage(url, browser, false) } }, }
應用:網絡
import { getList } from '../data' getListData = async () => { this.setState({ loading: true }) let { succsess, data } = await getList(this.infoConf) this.setState({ loading: false }) if (succsess) { this.setState((preState, props) => ({ hasMore: data.length < this.infoConf.pageSize ? false : true, resultStatus: data.length < this.infoConf.pageSize ? 2 : 1, list: [...preState.list, ...data], })) this.infoConf.pageindex++; } else { this.setState({ resultStatus: 0 }) } }
import ajax from './ajax' import lazyload from './lazyload' import momentHelper from './momentHelper' export default { ajax, lazyload, momentHelper }
例如:app
引用:less
import { scrollBottom, debounce } from '@/common/scrollData'
使用 @ 至關於src目錄 (自動構建配置) (比用 ../ ./ 好理解一些)
resolve: { ... extensions: ['.ts', '.tsx', '.js', '.json', '.styl', '.less'], ... },
require的時候能夠直接使用require('file'),不用require('file.js')
port: Math.floor(Math.random() * 1001) + 7000,
最近寫文檔比較多,因此把MarkDown整理了一遍,有須要能夠參考: