我使用样式化组件作为我的React App的CSS替代品。在开发中,一切正常(第一个屏幕截图),但是当我运行生产版本(npm build
)时,样式标签中的样式被剥离(第二个屏幕截图)。结果,生产版本中没有样式。
以下是生产版本:http://projects.loratadin.com.s3-website-us-east-1.amazonaws.com/weather-app/
答案 0 :(得分:3)
对于在那里的Create React App人员,您可以在根目录中添加.env文件并添加:
REACT_APP_SC_DISABLE_SPEEDY=true
答案 1 :(得分:2)
我能够复制您的问题,当应用程序在生产中时,它无法选择样式化组件内的html元素(样式不适用于该元素)。相反,您需要为input
和button
创建其他样式化的组件。
工作示例:https://github.com/mattcarlotta/Weather-App
我重构了您的应用程序以简化其结构。请阅读README
,以获取有关如何在开发和生产中运行它的说明(请勿将以上存储库用于生产,因为没有必要使用express
后端,我只是这样做了。您可以运行本地生产版本。
我更改了:
styled
组件移至components
文件夹以实现模块化styles
文件夹中assets
移动到images
并将它们导入到需要它们的styled
组件中(消除了使用require('../path/to/image')
的需要)App.js
文件。子级由state
和班级methods
控制。最重要的是,将您的form
变成了controlled component,并将getWeather
方法固定为:不允许空提交,如果AJAX
调用失败,它将{{1 }}错误(而不是破坏您的应用程序),并在成功提交后重置表单输入。catch
以确保prop-types
在声明中保持一致(字符串仍然是字符串,数字仍然是数字,依此类推)。 答案 2 :(得分:1)
我在生产中使用空样式标签时遇到了类似的问题。我正在使用无头浏览器进行服务器端渲染,此问题导致服务器端渲染的页面在加载JS资产之前显示为没有样式。
经过大量搜索,我终于找到了原因。样式组件库使用一种称为“快速模式”的东西在生产中注入样式。这使样式绕过DOM`并直接注入CSSOM中,从而出现在检查器中,但在DOM上完全不可见。
幸运的是,样式化组件4.1.0附带了针对此问题的修复程序!现在,您可以将名为SC_DISABLE_SPEEDY
的全局变量设置为true
,以禁用Speedy mode
并使样式也出现在Production中。请记住,您应该在导入任何样式化的组件之前,在应用程序的入口文件的最开始处执行此操作,否则它将无法正常工作。
我这样做的方法是创建一个名为globals.js
的新文件,其中包含global.SC_DISABLE_SPEEDY = true
,并将其作为我的index.js
中的第一件事导入。