本文的目的是介绍reactjs–React不在WebpackDev服务器上呈现的详细情况,特别关注react不在同一个项目下怎么跳转的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现
本文的目的是介绍reactjs – React不在Webpack Dev服务器上呈现的详细情况,特别关注react 不在同一个项目下怎么跳转的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解reactjs – React不在Webpack Dev服务器上呈现的机会,同时也不会遗漏关于Facebook React.js:如何在服务器上呈现状态组件?、node.js – React未定义ReferenceError?我正在使用webpack和webpack-dev-server、react+webpack+babel+webpcak-dev-server+react-router-dom从无到有、reactjs – IE11中的Webpack,Babel和React语法错误的知识。
本文目录一览:- reactjs – React不在Webpack Dev服务器上呈现(react 不在同一个项目下怎么跳转)
- Facebook React.js:如何在服务器上呈现状态组件?
- node.js – React未定义ReferenceError?我正在使用webpack和webpack-dev-server
- react+webpack+babel+webpcak-dev-server+react-router-dom从无到有
- reactjs – IE11中的Webpack,Babel和React语法错误
reactjs – React不在Webpack Dev服务器上呈现(react 不在同一个项目下怎么跳转)
webapp文件夹就像这样……
> {app}
– App.js
> {public}
– bundle.js
– index.html
> webpack.config.js
> .babelrc
> package.json
这是重要的文件
的WebPack
module.exports = { entry: './app/App.js',output: { path: './public',filename: 'bundle.js',},devServer: { inline:true,contentBase: './public',port: 3333 },module: { loaders: [ { test: /\.js$/,exclude: /node_modules/,loader: 'babel' } ] } }
的package.json
{ "name": "newaccount","version": "1.0.0","description": "a form submission for new accounts","main": "App.js","scripts": { "start": "webpack-dev-server" },"author": "---","license": "ISC","dependencies": { "react": "^15.4.1","react-dom": "^15.4.1","react-router": "^3.0.0" },"devDependencies": { "babel-core": "^6.18.2","babel-loader": "^6.2.8","babel-preset-es2015": "^6.18.0","babel-preset-react": "^6.16.0","html-webpack-plugin": "^2.24.1","webpack": "^1.13.3","webpack-dev-server": "^1.16.2" } }
.babelrc
{ "presets": [ "es2015","react" ] }
App.js
import React,{ Component } from 'react'; import ReactDOM from 'react-dom'; class Testing extends Component { render() { return ( <div> <h3>JUST A TEST</h3> </div> ) } } ReactDOM.render(<Testing />,document.getElementById('app'));
我曾尝试使组件测试成为ES6 const …
const Testing = () => return <div><h3>JUST A TEST</h3></div>
仍然无法在localhost:3333或我的计算机的完整路径上显示任何内容.
谢谢你的帮助
首先,在webpack.config.js的顶部添加一个HTMLWebpackConfiguration.然后,在/ app中添加index.html页面.最后,确保配置指向HTML文件.最后的webpack.config.js看起来像这样:
var HtmlWebpackPlugin = require('html-webpack-plugin'); var HTMLWebpackPluginConfig = new HtmlWebpackPlugin({ template: __dirname + '/app/index.html',filename: 'index.html',inject: 'body' }); module.exports = { entry: __dirname + '/app/App.js',output: { path: __dirname + '/public',plugins: [HTMLWebpackPluginConfig],loader: 'babel' } ] } }
app / index.html如下所示:
<!DOCTYPE html> <html lang="en"> <head> <Meta charset="UTF-8"> <title>My App</title> <link rel="stylesheet" href="styles.css"> </head> <body> <div id="app"></div> </html>
信息来源:
https://tylermcginnis.com/react-js-tutorial-1-5-utilizing-webpack-and-babel-to-build-a-react-js-app-5f804d729d3b#.f4sslv7ub
Invariant Violation: _registerComponent(…): Target container is not a DOM element
http://javascriptplayground.com/blog/2016/07/webpack-html-plugin/
Facebook React.js:如何在服务器上呈现状态组件?
我认为我在概念上使用React.js在服务器端渲染中缺少一些东西
假设我想创建一个页面来显示服务器端数据库中的项目,并使用输入字段对其进行过滤。
我想要一个页面:
- 响应类似的URL
/items?name=foobar
- 带有React输入字段以按名称过滤项目
- 与React组件一起显示已过滤项目的列表
假设我有一个公共的REST API来查询客户端上的项目。
从概念上讲,我首先要执行的操作(GET /items?name=foobar
)是:
- 我希望输入字段显示用户作为参数传递的内容,因此我需要将查询参数(’foobar’)作为’prop’传递给react组件(如
initialName
)
所以我尝试了这个:
// A stateful component, maintaining the value of a query field var ItemForm = React.createClass({ getInitialState : function () { return { name : this.props.initialName }; }, handleInputValueChanged : function() { var enteredName = this.refs.query.getDOMNode().value.trim(); this.props.onNameChanged(enteredName); }, render : function () { return React.DOM.form({ children : [ React.DOM.label({ children : "System name" }), React.DOM.input({ ref : "query", value : this.state.name, onChange : this.handleInputValueChanged }) ] }); }});
- 我还必须 在服务器上 进行数据库查询以获取项目列表,并将该项目列表作为ItemList的“ prop”传递(例如“ initialItems”)
据我了解,我需要一个简单的组件来显示列表,并将其作为“属性”接收:
// A stateless component, displaying a list of item var ItemList = return React.createClass({ propTypes : { items : React.PropTypes.array }, render : function () { return React.DOM.ul({ children : _.map(this.props.items, function (item) { return React.DOM.li({ children : [ React.DOM.span({ children : ["Name : ", item.name].join(" ") })] }); }) }); }});
- 现在,我需要一个组件来显示整个Page;该组件将必须维护整个页面的状态,即查看在字段中输入的名称,并进行API查询以更新列表项。但是我不明白该组件如何具有一个既可以在服务器端又可以在客户端渲染的“ initialState”。
我尝试了这个:
// A stateful react component, maintaining the list of items var ItemPage = React.createClass({ getInitialState : function () { // ????? // This is where I''m sure the problem lies. // How can this be known both on server and client side ? return { items : this.props.initialItems || [] }; }, queryItems : function (enteredName) { var self = this; // The field was emptied, we must clear everything if (!enteredName) { this.setState({ items : [] }); } else { // The field was changed, we want to do a query // then change the state to trigger a UI update. // The query code is irrelevant, I think. doQuery(enteredName).then(function (items) { self.setState({ items : items }); }); } }, render : function () { // I don''t want to display the same view // if there is no results. // This uses a ''state'' property of the page var results = null; if (_.isEmpty(this.state.items)) { results = React.DOM.div({ ref : "results", children : "No results" }); } else { results = ItemListView({ // Here items is a ''prop'', the ItemList is technically // stateless items : this.state.items }); } return React.DOM.div({ children : [ ItemForm({ initialName : this.props.initialName, onNameChanged : this.queryItems }), results ] }); }});
那就是我被困住的地方。我可以使用以下方式在服务器端渲染内容:
var name = // The name from the query parametersvar items = doQueryOnServerSide(name);React.renderComponentAsString(ItemPage({ initialName : name, initialItems : items});
但是,当我尝试编写客户端javascript时,该怎么办?我知道要在哪里渲染我的dom,但是我应该将哪些初始道具传递给react组件?
React.renderComponent(ItemPage({ initialName : ??? // Read the name parameter from URL ? initialItems : ??? // I don''t know yet, and I don''t want to make an API call until the user entered something in the input box });
我尝试过的大多数尝试最终都会在客户端上“擦除” DOM,并显示以下消息:
React尝试在容器中使用重用标记,但是校验和无效。通常,这意味着您正在使用服务器呈现,并且服务器上生成的标记不是客户端期望的。React注入了新的标记来补偿可以正常工作的标记,但是您已经失去了服务器渲染的许多好处。相反,要弄清为什么生成的标记在客户端或服务器上不同。
请注意,仅擦除了ItemList组件的标记,因此我认为这是该组件的实现问题,但我真的不知道从哪里开始。
我在正确的轨道上吗?还是我完全想念东西?
答案1
小编典典使用服务器渲染时,应始终传递与用于在服务器上渲染组件相同的道具。在这种情况下,您需要传递相同的initialItems道具,以获取React.renderComponent
服务器渲染的标记(通过简单地对道具进行JSON化并将其放入调用中renderComponent
)。
当指定时,您从initialItems读取的一般结构对我来说很有意义。这样做使您可以使用预加载的数据或不使用预加载的数据来制作组件。设置初始状态所需的条件取决于在从头开始渲染全新组件的情况下要显示的内容。(如果您始终使用服务器渲染的标记,则只需传递initialName
和即可initialItems
。)
希望有道理。
node.js – React未定义ReferenceError?我正在使用webpack和webpack-dev-server
var React = require('react'); var ReactDOM = require('react-dom'); ReactDOM.render( <h1>hello world</h1>,document.getElementById('content') )
我用webpack构建build / bundle.js&
我将bundle.js导入index.html
index.html的:
<!DOCTYPE html> <html> <head> ┊ <Meta charset="utf-8"> ┊ <Meta name="viewport" content="width=device-width"> ┊ <title></title> </head> <body> ┊ <div id="content"></div> ┊ <script src="./build/bundle.js" type="text/javascript" charset="utf-8"></script> </body> </html>
但是当我运行webpack-dev-server时,chrome控制台错误:
bundle.js:57未捕获的ReferenceError:未定义React
我确定,我已经运行了npm install react
我该怎么办?(-_-)ゞ゛
解决方法
var React = require('react'); var ReactDOM = require('react-dom'); ReactDOM.render( <h1>hello world</h1>,document.getElementById('content') )
JSX是一种由React组件解释的转换语言.所以,在app.js中必须有React才能让React组件解释jsx !!
react+webpack+babel+webpcak-dev-server+react-router-dom从无到有
react-demo
两个目标:
- 手动搭建react脚手架:react、bable、webpack、react-router-dom、webpack-dev-server
- 理解webpack从无到有打包原理
手动搭建react脚手架项目地址
有坑的地方会特别说明,因为好多文章都没有给出babel和webpack-dev-server的版本,所以在搭建过程中遇到比较多的问题。
1.react react react-dom
2.babel babel-loader babel-core babel-presets-es2015|stage-0|react
babel 这里的坑:注意babel的版本号,比如运行时报错babel/core找不到等等,需要降低babel的版本,
注意webpack.config.js配置文件中的loader书写,需要从webpack官网找,有的博客写的不对会造成错误
注意需要有一个.babelrc的文件
3.webpack
4.webpack-dev-server
使用webpack-dev-server --hot --inline --config webpack.config.js 运行报错,注意降低webpack-dev-server的版本号
5.react-router-dom
reactjs – IE11中的Webpack,Babel和React语法错误
我正在使用Webpack和Babel来编译它.
我尝试使用babel-polyfill和babel-es6-polyfill,但这没有帮助.
这是我得到的错误:
SCRIPT1002: Syntax error File: app.js,Line: 70,Column: 1
第70行第1列是Webpack的eval开始的地方:
/***/ }),/* 21 */,/* 22 */ /***/ (function(module,exports,__webpack_require__) { "use strict"; eval("\n\nObject.define... <- Line 70 ^--- Column 1
这是我的webpack.config.js:
'use strict'; // Include modules and plugins const webpack = require('webpack'); const path = require('path'); const ExtractTextPlugin = require('extract-text-webpack-plugin'); // App and build directories const APP_DIR = path.resolve(__dirname,'src/'); const BUILD_DIR = path.resolve(__dirname,'public'); // Extract sass from the application,see index.jsx const extractSass = new ExtractTextPlugin({ filename: 'css/[name].css' }); // The config file to load let env = (process.env.NODE_ENV || 'dev').toLowerCase(); let configFile = path.resolve(__dirname,'config/config.' + env + '.json'); // Default config file if not found const defaultConfigFile = path.resolve(__dirname,'config/config.dev.json'); /* * Config to be injected into the app * Note that JSON files are parsed upon requiring */ let config; /* * Get the actual config */ try { config = require(configFile); console.log('Loaded config file ' + configFile); } catch (e) { config = require(defaultConfigFile); console.log('Fallen back to default config file'); } // The actual webpack config const webpackConfig = { entry: { // The app entry point app: APP_DIR + '/index.jsx',// vendor files will be used for bundling,they will not be compiled into the app itself vendor: [ 'axios','prop-types','react','reactstrap','react-chartjs-2','react-dom','react-redux','react-router','react-router-dom','redux','sprintf-js',] },output: { path: BUILD_DIR,filename: 'js/app.js' },module: { /* * These are loaders for webpack,these will assist with compilation */ loaders: [ { /* * Use Babel to compile JS and JSX files * See .babelrc */ test: /\.jsx?/,include: APP_DIR,loader: 'babel-loader' } ],rules: [ { /* * Sass/Scss compilation rules */ test: /\.scss$/,use: extractSass.extract({ use: [ { loader: 'css-loader' },{ loader: 'sass-loader' } ],fallback: 'style-loader' }) },{ /* * JS(X) compilation rules * We need this,otherwise Webpack will crash during compile time */ test: /\.jsx?/,loader: 'babel-loader' } ] },plugins: [ /* * The CommonsChunkPlugin is responsible to create bundles out of commonly used modules * E.g. React,React Dom,etc */ new webpack.optimize.CommonsChunkPlugin({ name: 'vendor',// See entry.vendor filename: 'js/vendor.bundle.js' }),extractSass ],externals: { /* * The config external will be available to the app by using require('config') */ 'config': JSON.stringify(config) },devServer: { contentBase: BUILD_DIR,compress: true,port: 7600,inline: true,},}; if (env === 'production') { webpackConfig.devtool = 'hidden-source-map'; } else { webpackConfig.devtool = 'eval-source-map'; } module.exports = webpackConfig;
我的依赖项:
"dependencies": { "axios": "^0.16.1","babel-core": "^6.24.0","babel-loader": "^6.4.1","babel-polyfill": "6.5.1","babel-preset-es2015": "^6.24.0","babel-preset-react": "^6.23.0","babel-preset-stage-1": "^6.24.1","chart.js": "^2.6.0","cross-env": "^3.2.4","css-loader": "^0.27.3","enumify": "^1.0.4","extract-text-webpack-plugin": "^2.1.0","history": "^4.6.3","ip": "^1.1.5","lodash": "^4.17.4","moment": "^2.18.1","node-sass": "^4.5.1","prop-types": "^15.5.10","react": "^15.4.2","react-addons-css-transition-group": "^15.5.2","react-addons-transition-group": "^15.5.2","react-chartjs-2": "^2.1.0","react-dom": "^15.4.2","react-js-pagination": "^2.1.0","react-redux": "^5.0.4","react-router": "^4.1.1","react-router-dom": "^4.1.1","reactstrap": "^4.5.0","redux": "^3.6.0","sass-loader": "^6.0.3","sprintf-js": "^1.1.0","style-loader": "^0.16.0","webpack": "^2.3.2" },"devDependencies": { "eslint-plugin-react": "^6.10.3","webpack-dev-server": "^2.5.1" }
我的.babelrc:
{ "presets" : [ "es2015","react","stage-1" ] }
编辑1
按照BANANENMANNFRAU的回答,我添加了babel-preset-env并编辑了我的.babelrc如下:
{ "presets" : [ [ "env",{ "targets": { "browsers": [ "last 5 versions","ie >= 11" ] } }],"es2015","stage-1" ] }
这没有帮助,它仍然导致IE11中的错误.
{ "presets" : [ ["env",{ "targets": { "browsers": ["last 2 versions","ie >= 11"] } }],] }
您还可以从配置中删除以下部分:
loaders: [ { /* * Use Babel to compile JS and JSX files * See .babelrc */ test: /\.jsx?/,
检查文档here
今天的关于reactjs – React不在Webpack Dev服务器上呈现和react 不在同一个项目下怎么跳转的分享已经结束,谢谢您的关注,如果想了解更多关于Facebook React.js:如何在服务器上呈现状态组件?、node.js – React未定义ReferenceError?我正在使用webpack和webpack-dev-server、react+webpack+babel+webpcak-dev-server+react-router-dom从无到有、reactjs – IE11中的Webpack,Babel和React语法错误的相关知识,请在本站进行查询。
本文标签: