日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

              歡迎訪問 生活随笔!

              生活随笔

              當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

              编程问答

              webpack+es6+node+react初实践及总结

              發(fā)布時間:2025/3/17 编程问答 15 豆豆
              生活随笔 收集整理的這篇文章主要介紹了 webpack+es6+node+react初实践及总结 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

              之前對于react的認識只存在與聽說,說他有啥virtual DOM,很好的組件化,效率很高之類的,,不過一直沒有學習,昨天閑著無聊就開始學習react.發(fā)現(xiàn)jsx的寫法真是666啊,由于是剛開始學習,所以總的經驗不是很多。
              我跟著其官網上的教程做了一個評論框的功能,后臺用的是node,并沒有鏈接數(shù)據(jù)庫,只是文件流的讀寫;
              最終結果:

              文件結構:

              • react_comment

                • node_modules

                • public

                  • build

                    • build.js

                    • build.js.map

                  • js

                    • comment.js

                    • comment_box.js

                    • commemt_form.js

                    • comment_list.js

                    • entry.js

                  • scss

                    • comment.scss

                • server

                  • server.js

                • comment.json

                • package.json

                • webpack.config.js

              webpack.config.js:

              var path = require('path'),webpack = require('webpack');var commonLoaders = [{test:/\.js$/,loader:'babel',exclude:'/node_modules/'}, //exclude:不包含這個文件夾下的目錄,不然babel也會編譯里面的js文件,導致速度變慢{test:/\.scss$/,loader:'style!css!autoprefixer!sass'}];var path = path.resolve(__dirname,'public/build');module.exports = {entry:['./public/js/entry.js' //指定入口文件],output:{ //指定輸出文件路徑及namepath:path,filename:'build.js'},module:{loaders:commonLoaders},resolve:{extensions:['','.js','.scss']},babel:{ //這里我是使用的是babel-loader、babel-preset-2015、babel-preset-react,并沒有使用jsx-loader,所以這里作如下配置:presets:['es2015','react']}};

              數(shù)據(jù)源:

              [{"id": 1388534400000,"author": "Pete Hunt","text": "Hey there!"}]

              入口文件:

              import React from 'react'; import ReactDOM from 'react-dom'; import {CommentBox} from './comment_box'; import reset from '../scss/comment'; ReactDOM.render(<CommentBox url='/api/comments' pollInterval={2000} />,document.getElementById('content'));
            1. 這里一定要注意的是渲染組件用的是react-dom,而不是react,所以要把它也require進來

            2. 一定要用原生的document.getElementById()來獲取容器

            3. 最外層組件

              import React from 'react';import $ from 'webpack-zepto';import {CommentList} from './comment_list';import {CommentForm} from './comment_form';class CommentBox extends React.Component{constructor(props){super(props)this.state = {data: []};this.handleCommentSubmit = this.handleCommentSubmit.bind(this);}loadCommentsFromServer(){let _this = this;$.ajax({url:_this.props.url,dataType:'json',cache:false,success(data){_this.setState({data:data});},error(xhr, status, err){console.error(_this.props.url, status, err.toString());}})}componentDidMount(){this.loadCommentsFromServer();// setInterval(this.loadCommentsFromServer.bind(this),this.props.pollInterval);}handleCommentSubmit(comment){let comments = this.state.data;comment.id = Date.now();let newComments = [...comments,...comment];this.setState({data:newComments});let _this = this;$.ajax({url: _this.props.url,dataType: 'json',type: 'POST',data: comment,success(data) {_this.setState({data: data});},error(xhr, status, err) {_this.setState({data: comments});console.error(_this.props.url, status, err.toString());}})}render(){return(<div className="commentBox"><h1>Comments:</h1><CommentList data={this.state.data} /><CommentForm onCommentSubmit={this.handleCommentSubmit} /></div>);}}export {CommentBox};
            4. 由于在es6中使用類的構造函數(shù)constructor來代替了getInitialState,所以以前在getInitialState里聲明的初始量要變化到在constructor中

            5. 另外就是在組件上綁定的函數(shù)的this指向問題坑了我好久

            6. import React from 'react';class CommentForm extends React.Component{constructor(props){super(props);this.state = {author:'',text:''};}handleAuthorChange(e){this.setState({author:e.target.value})}handleTextChange(e){this.setState({text:e.target.value})}handleSubmit(e){e.preventDefault();let author = this.state.author.trim(),text = this.state.text.trim();if(!text || !author){alert('請?zhí)顚懲暾?#39;);return false;}this.props.onCommentSubmit({author:author,text:text});this.setState({author:'',text:''})}render(){return(<form className='commentForm' onSubmit={this.handleSubmit.bind(this)}><input type='text' placeholder='name' value={this.state.author}onChange={e => this.handleAuthorChange(e)} /><input type='text' placeholder='say something...' value={this.state.text}onChange={this.handleTextChange.bind(this)} /><input type='submit' value='Post' /></form>);}}export {CommentForm};

              在這個組件中,我給兩個input綁定了函數(shù),一開始以為函數(shù)里的this指向的是組件本身,后來才發(fā)現(xiàn)是window,原因是onChange的回調是在瀏覽器全局對象執(zhí)行的,此時的this并不指向定義的React組件部分,如果不用es6,它是默認綁定到組件上的,所以這里要修改this的指向:

              1. onChange={e => this.handleAuthorChange(e)}2. onChange={this.handleAuthorChange.bind(this)}3. constructor(props){ //在構造器里面綁定,推薦super(props)this.state = {data: []};this.handleCommentSubmit = this.handleCommentSubmit.bind(this);}

              具體的代碼我已放到github上,有需要的可以參考:github
              此外,有一篇關于react規(guī)范的文章有興趣的也可以看看:react規(guī)范
              以上只是一個初學者的的看法,如果有不足或者錯誤的地方,歡迎指出

              總結

              以上是生活随笔為你收集整理的webpack+es6+node+react初实践及总结的全部內容,希望文章能夠幫你解決所遇到的問題。

              如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

              主站蜘蛛池模板: 熟妇人妻中文字幕无码老熟妇 | 精品人妻一区二区三区四区久久 | 可以免费看污视频的网站 | 不卡在线一区二区 | 午夜激情av在线 | 国产视频一区二区三区在线观看 | 少妇偷人精品无码人妻 | 在线免费观看黄视频 | 青青草手机视频在线观看 | 久草免费在线视频观看 | 日本三级黄色录像 | 色哟哟视频在线 | 欧美性猛交xxxx乱大交 | 西西大胆午夜视频 | 日韩尤物 | 在线一区二区视频 | 国产毛片在线看 | 国产第八页 | 亚洲品质自拍 | 91九色porn| 桃色成人| 毛片视频免费播放 | www.九九九| 粉嫩av一区二区三区 | 日本韩国欧美中文字幕 | 免费播放黄色片 | 国产在线自 | 欧美美女一区二区 | 天堂va欧美ⅴa亚洲va一国产 | 91tv国产成人福利 | jizz欧美大片| 日韩精品免费一区二区三区 | 911成人网| 97人人爽| av免费影院 | 国产网红在线 | 色噜噜视频| 国模私拍一区二区 | 男男大尺度 | 干极品美女 | 亚洲精品国偷拍自产在线观看蜜桃 | 久久99精品国产麻豆婷婷 | 中文字幕在线播放第一页 | 黑人操日本女人视频 | 日韩精品久久久久久久酒店 | 黑人巨大精品欧美一区免费视频 | 在线一区观看 | 色窝窝综合色窝窝久久 | 手机在线观看毛片 | 欧美乱大交xxxxx潮喷l头像 | 丝袜 亚洲 另类 欧美 重口 | 国产亚洲精品久久久久久打不开 | 午夜综合 | 久久久久99精品成人片试看 | 91禁动漫在线 | 国产精品原创 | 国产3页| 少妇精品久久久久久久久久 | 在线观看黄色国产 | 女生脱裤子让男生捅 | 日本不卡视频 | 一级做a爰片 | 精品网站999| 国产三级在线免费观看 | 爱色成人网 | 国产黄色片免费看 | 欧美性69 | 久草视频观看 | 日韩av网址在线观看 | 中文字幕天堂在线 | 亚洲人成免费 | 国产欧美日韩综合 | 在线视频啪 | 夜夜免费视频 | 麻豆av一区二区三区在线观看 | www.麻豆av | 国产在线中文 | 欧美一级激情 | 自拍视频啪| 亚洲精品尤物 | 99久久综合国产精品二区 | 中文字幕无码毛片免费看 | 国产网红主播精品av | 国产18禁黄网站免费观看 | 欧美一a一片一级一片 | 久在线| 51啪影院| 欧美久草视频 | 一卡二卡三卡在线 | 天堂av网在线 | 天码人妻一区二区三区在线看 | 日本三级日本三级日本三级极 | 亚洲精品小视频 | 亚洲无av在线中文字幕 | 久久作爱视频 | 亚洲天堂av一区二区 | 久久爱网| 欧美日韩国产一区二区在线观看 | 超碰免费97 |