【发布时间】:2017-12-22 15:16:51
【问题描述】:
好的,伙计们,问题来了……我一直在为我的 Web 应用程序编写代码,并使用另一个可以流畅运行的应用程序作为开始的示例。以下是源代码:
(./app.jsx)
import React from 'react';
import ReactDOM from 'react-dom';
import { Provider } from 'react-redux';
import { createStore, applyMiddleware } from 'redux';
import { Router, Route, IndexRoute, browserHistory } from 'react-router';
import App from './components/app';
import Signin from './components/auth/signin';
import reducers from './reducers';
const createStoreWithMiddleware = applyMiddleware()(createStore);
ReactDOM.render(
<Provider store={createStoreWithMiddleware(reducers)}>
<Router history={browserHistory}>
<Route path='/' component={App}>
<Route path='signin' component={Signin} />
</Route>
</Router>
</Provider>,
document.getElementById('app')
);
(./components/app.js)
import React, { Component } from 'react';
import Header from './header';
export default class App extends Component {
render() {
return (
<div>
<Header />
{this.props.children}
</div>
);
}
}
(./components/auth/signing.js)
import React, { Component } from 'react';
import { reduxForm } from 'redux-form';
class Signin extends Component {
handleFormSubmit({ email, password }) {
console.log(email, password);
}
render() {
const { handleSubmit, fields: { email, password }} = this.props;
return (
<form onSubmit={handleSubmit(this.handleFormSubmit.bind(this))}>
<fieldset className="form-group">
<label>Email</label>
<input {...email} className="form-control"/ >
</fieldset>
<fieldset className="form-group">
<label>Email</label>
<input {...password} className="form-control"/ >
</fieldset>
<button action="submit" className="btn btn-primary">Sign in</button>
</form>
);
}
}
export default reduxForm({
form: 'signin',
fields: ['email', 'password']
})(Signin);
(你可以在这里看到我的整个仓库:https://github.com/LiJuons/react-dribbble)
问题是,当我转到 localhost:3000 时 - 一切正常,但是当我输入 localhost:3000/signin 时 - 我收到错误消息,上面写着“无法获取 /signin”,尽管我正在从工作中获取代码的应用程序正确并显示形式! 问题出在路由中,因为如果我在项目中将 signin.js 路由的路径设置为“/”,则表单将毫无问题地显示在主目录中。
两个项目中的Package.json文件相同(包数相同,版本和依赖项相同),只是启动脚本不同,所以...
工作项目和我的唯一区别在于,在工作中,一个“npm start”脚本被定义为:
"start": "node ./node_modules/webpack-dev-server/bin/webpack-dev-server.js"
它在我的哪里:
"start": "node server.js"
附:我检查了每一行,以确保两个项目的代码尽可能同质。
有什么建议可以解决这个问题吗? 谢谢
【问题讨论】:
-
你使用的是什么版本的 redux 表单?如果它是较新的版本,您的导出语句需要更改,如果您告诉我 package.json 文件中的 redux 表单版本是什么,我可以为您提供一些代码。
-
@DanielZuzevich "redux-form": "^3.1.7" 你可以在github.com/LiJuons/react-dribbble/blob/master/package.json看到我的整个包列表
-
您是否尝试过将 npm start 命令改回其他人项目中的命令?此外,/signin 路由是您个人添加的,还是已经在您从中获取源代码的项目中。我认为您遇到了编译错误,您的 bundle.js 文件没有被更新以在其中包含登录路由。您应用程序中的所有 JS 代码都编译成 bundle.js,我认为它没有更新为具有该路由。
-
@DanielZuzevich 我自己在这篇文章中编写了所有内容。如果我将脚本更改为“节点... webpack-dev-server.js”,我的应用程序崩溃,说它找不到模块或 smtg(我从头开始制作这个应用程序,选择了“节点 server.js”启动脚本,所以我可以很容易地在heroku上部署这个应用程序)。其他一切似乎都很好,只有路线被破坏(准确地说是“儿童”路线)
标签: ecmascript-6 react-router react-redux webpack-dev-server jsx