Reactjs 当我对此.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

当我尝试对此RegisterPage.jsx文件进行简单更改(例如更改标题或标签的文本)时,即使在我运行“sudo npm run build”或“sudo npm start”时,我的服务器也不会显示任何更改

如果我在我的个人计算机上进行了更改,并且运行了localhost,那么我可以很好地看到更改。我只有在尝试从Ubuntu服务器更新文件时才会遇到这些问题

RegisterPage.jsx:

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”}