Reactjs 当我对此.jsx文件进行更改时,不进行更新。只有当我尝试在服务器上进行更改时才会发生这种情况
当我尝试对此RegisterPage.jsx文件进行简单更改(例如更改标题或标签的文本)时,即使在我运行“sudo npm run build”或“sudo npm start”时,我的服务器也不会显示任何更改 如果我在我的个人计算机上进行了更改,并且运行了localhost,那么我可以很好地看到更改。我只有在尝试从Ubuntu服务器更新文件时才会遇到这些问题 RegisterPage.jsx:Reactjs 当我对此.jsx文件进行更改时,不进行更新。只有当我尝试在服务器上进行更改时才会发生这种情况,reactjs,react-native,react-redux,react-router,Reactjs,React Native,React Redux,React Router,当我尝试对此RegisterPage.jsx文件进行简单更改(例如更改标题或标签的文本)时,即使在我运行“sudo npm run build”或“sudo npm start”时,我的服务器也不会显示任何更改 如果我在我的个人计算机上进行了更改,并且运行了localhost,那么我可以很好地看到更改。我只有在尝试从Ubuntu服务器更新文件时才会遇到这些问题 RegisterPage.jsx: import React from 'react'; import { Link } from 'r
import React from 'react';
import { Link } from 'react-router-dom';
import { connect } from 'react-redux';
import { userActions } from '../_actions';
class RegisterPage extends React.Component {
constructor(props) {
super(props);
this.state = {
user: {
firstName: '',
lastName: '',
username: '',
password: ''
},
submitted: false
};
this.handleChange = this.handleChange.bind(this);
this.handleSubmit = this.handleSubmit.bind(this);
}
handleChange(event) {
const { name, value } = event.target;
const { user } = this.state;
this.setState({
user: {
...user,
[name]: value
}
});
}
handleSubmit(event) {
event.preventDefault();
this.setState({ submitted: true });
const { user } = this.state;
if (user.firstName && user.lastName && user.username && user.password) {
this.props.register(user);
}
}
render() {
const { registering } = this.props;
const { user, submitted } = this.state;
return (
<div className="col-md-6 col-md-offset-3">
<h2>Register</h2>
<form name="form" onSubmit={this.handleSubmit}>
<div className={'form-group' + (submitted && !user.firstName ? ' has-error' : '')}>
<label htmlFor="firstName">First Name</label>
<input type="text" className="form-control" name="firstName" value={user.firstName} onChange={this.handleChange} />
{submitted && !user.firstName &&
<div className="help-block">First Name is required</div>
}
</div>
<div className={'form-group' + (submitted && !user.lastName ? ' has-error' : '')}>
<label htmlFor="lastName">Last Name</label>
<input type="text" className="form-control" name="lastName" value={user.lastName} onChange={this.handleChange} />
{submitted && !user.lastName &&
<div className="help-block">Last Name is required</div>
}
</div>
<div className={'form-group' + (submitted && !user.username ? ' has-error' : '')}>
<label htmlFor="username">Username</label>
<input type="text" className="form-control" name="username" value={user.username} onChange={this.handleChange} />
{submitted && !user.username &&
<div className="help-block">Username is required</div>
}
</div>
<div className={'form-group' + (submitted && !user.password ? ' has-error' : '')}>
<label htmlFor="password">Password</label>
<input type="password" className="form-control" name="password" value={user.password} onChange={this.handleChange} />
{submitted && !user.password &&
<div className="help-block">Password is required</div>
}
</div>
<div className="form-group">
<button className="btn btn-primary">Register</button>
{registering &&
<img src="data:image/gif;base64,R0lGODlhEAAQAPIAAP///wAAAMLCwkJCQgAAAGJiYoKCgpKSkiH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCgAAACwAAAAAEAAQAAADMwi63P4wyklrE2MIOggZnAdOmGYJRbExwroUmcG2LmDEwnHQLVsYOd2mBzkYDAdKa+dIAAAh+QQJCgAAACwAAAAAEAAQAAADNAi63P5OjCEgG4QMu7DmikRxQlFUYDEZIGBMRVsaqHwctXXf7WEYB4Ag1xjihkMZsiUkKhIAIfkECQoAAAAsAAAAABAAEAAAAzYIujIjK8pByJDMlFYvBoVjHA70GU7xSUJhmKtwHPAKzLO9HMaoKwJZ7Rf8AYPDDzKpZBqfvwQAIfkECQoAAAAsAAAAABAAEAAAAzMIumIlK8oyhpHsnFZfhYumCYUhDAQxRIdhHBGqRoKw0R8DYlJd8z0fMDgsGo/IpHI5TAAAIfkECQoAAAAsAAAAABAAEAAAAzIIunInK0rnZBTwGPNMgQwmdsNgXGJUlIWEuR5oWUIpz8pAEAMe6TwfwyYsGo/IpFKSAAAh+QQJCgAAACwAAAAAEAAQAAADMwi6IMKQORfjdOe82p4wGccc4CEuQradylesojEMBgsUc2G7sDX3lQGBMLAJibufbSlKAAAh+QQJCgAAACwAAAAAEAAQAAADMgi63P7wCRHZnFVdmgHu2nFwlWCI3WGc3TSWhUFGxTAUkGCbtgENBMJAEJsxgMLWzpEAACH5BAkKAAAALAAAAAAQABAAAAMyCLrc/jDKSatlQtScKdceCAjDII7HcQ4EMTCpyrCuUBjCYRgHVtqlAiB1YhiCnlsRkAAAOwAAAAAAAAAAAA==" />
}
<Link to="/login" className="btn btn-link">Cancel</Link>
</div>
</form>
</div>
);
}
}
function mapState(state) {
const { registering } = state.registration;
return { registering };
}
const actionCreators = {
register: userActions.register
}
const connectedRegisterPage = connect(mapState, actionCreators)(RegisterPage);
export { connectedRegisterPage as RegisterPage };
既然它叫webpack,我想你也需要它
webpack.config.js:
var HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
mode: 'development',
resolve: {
extensions: ['.js', '.jsx']
},
module: {
rules: [
{
test: /\.jsx?$/,
loader: 'babel-loader'
}
]
},
plugins: [new HtmlWebpackPlugin({
template: './src/index.html'
})],
devServer: {
historyApiFallback: true
},
externals: {
// global app config object
config: JSON.stringify({
apiUrl: '/api'
})
}
}
只需将选项
hot:true
添加到devServerconfig
devServer: {
historyApiFallback: true,
hot: true,
},
只需将选项
hot:true
添加到devServerconfig
devServer: {
historyApiFallback: true,
hot: true,
},
谢谢你的两个答案,但问题实际上只是因为我在更新服务器后没有清除浏览器缓存。谢谢你的两个答案,但问题实际上只是因为我在更新服务器后没有清除浏览器缓存。我通常建议不要直接在服务器上进行更改。无论如何,您需要显示您的
包.json
,这样我们就知道npm start
和npm build
是什么了。@101arrowz我应该在自己的ide中进行这些更改并从存储库中提取吗?这不是个坏主意,但是如果您正在寻找HMR而不仅仅是宿主,那么Alexander的解决方案就可以了。我通常建议不要直接在服务器上进行更改。无论如何,您需要显示您的包.json
,这样我们就知道npm start
和npm build
是什么了。@101arrowz我应该在自己的ide中进行这些更改并从存储库中提取吗?这不是个坏主意,但是如果您正在寻找HMR而不仅仅是宿主,然后Alexander的解决方案就可以了。这对我不起作用,你还有其他解决方案吗?尝试添加到网页包配置:“output”:{path:path.join(u dirname,'build'),publicPath:“/build/”,“filename:“[name].js”}
这对我不起作用,您还有其他解决方案吗?请尝试添加到网页包配置:“输出”:{path:path.join(\uu dirname,'build'),publicPath:“/build/”,“filename”:“[name].js”}