在本文中,我们将详细介绍Next.js-使用CSS模块时无法应用动态类名的各个方面,并为您提供关于css不生效的原因的相关解答,同时,我们也将为您带来关于angular–在定位ECMAScript20
在本文中,我们将详细介绍Next.js - 使用 CSS 模块时无法应用动态类名的各个方面,并为您提供关于css不生效的原因的相关解答,同时,我们也将为您带来关于angular – 在定位ECMAScript 2015模块时无法使用导入分配、css – ReactJS向手动类名添加动态类、extjs JSONStore的load事件/insert,add方法应用 如何动态改变显示数据、extjs4 treepanel动态改变行高度示例_extjs的有用知识。
本文目录一览:- Next.js - 使用 CSS 模块时无法应用动态类名(css不生效的原因)
- angular – 在定位ECMAScript 2015模块时无法使用导入分配
- css – ReactJS向手动类名添加动态类
- extjs JSONStore的load事件/insert,add方法应用 如何动态改变显示数据
- extjs4 treepanel动态改变行高度示例_extjs
Next.js - 使用 CSS 模块时无法应用动态类名(css不生效的原因)
如何解决Next.js - 使用 CSS 模块时无法应用动态类名?
希望有人能帮我解决这个问题。
我正在尝试通过 NextJs 建立一个网站。我的其中一个页面有一些段落和按钮,它们的样式根据状态和事件而不同。使用纯 React 时,以及在 NextJs 中使用全局样式表时,我可以使样式按预期工作;但是当我使用 CSS 模块时,我无法让它按预期运行。
(注意:我也可以通过使用一个简单的三元来让它工作,比如
<h1 className={submitted ? styles.showresult : styles.hideresult}>Correct? {correct}</h1>
;
但我还有其他一些场景,我需要依赖多个 if 并创建多个类,每个类都有自己的样式,因此我无法将简单的三元作为我的最终解决方案。
例如这是文件 pagex.js
import React from ''react'';
import ReactDOM from ''react-dom'';
const Pagex = () => {
const [submitted,setSubmitted] = React.useState(false); // whether the submit button was pressed
function calculatescore() {
let correct = 0
let incorrect = 0
//......some scoring logic.....
setSubmitted(true)
}
// function to create a display class based on whether the submit button has been pressed
function displayResult(){
if (submitted === true) {
return "showtheresult"
} else {
return "hidetheresult"
}
}
return (
<section className="results">
<h1 className={displayResult()}>Correct? {correct}</h1>
<h1 className={displayResult()}>Incorrect? {incorrect}</h1>
<button className={displayResult()} onClick={handleMovClick}>An instruction</button>
</section>
</div>
);
};
export default Pagex;
globals.css 文件包含
h1.hidetheresult,h3.hidetheresult {
visibility: hidden;
}
h1.showtheresult,h3.showtheresult {
visibility: visible;
}
button.hidetheresult {
border-color: pink;
}
button.showtheresult {
border-color: aqua;
}
使用 CSS 模块时的变化
- 在正确的文件夹中添加一个具有正确名称的 CSS 文件 (../styles/Pagex.module.css) 包含相同的样式 以上
- pagex.js 中的额外导入
import styles from ''../styles/Pagex.module.css''
- 更改函数中的引用 在 pagex.js 中
function displayResult(){
if (submitted === true) {
return {styles.showtheresult}
} else {
return {styles.hidetheresult}
}
}
当我这样做时,''.''在 {styles.showtheresult}
和 {styles.hidetheresult}
中被 vscode 突出显示为错误,其中包含以下详细信息:'','' expected。 ts(1005)。
尝试编译后,在运行开发服务器的情况下保存 js 显示类似消息:语法错误:意外令牌,预期“,”,浏览器显示相同的消息以及 “编译失败"
还尝试通过从 displayResult() 函数中删除花括号来传递 styles.showtheresult
/ styles.hidetheresult
。编译但在编译的网页上没有任何反应,即按下按钮时类不会更新,因此无法应用样式。
还尝试在 return 语句中作为 ${styles.showresult} 和 ${styles.hideresult} (带 `)传递。这也可以编译,但页面本身给了我一个“未处理的运行时错误参考错误:样式未定义”消息,我无法加载页面。
如果有人可以帮助纠正我在函数本身或代码中的其他地方的语法,我们将不胜感激。
解决方法
因为你问得很好;)(开玩笑的)
所以 Next.js 是一个固执己见的框架,它使用 CSS 模块来强制执行组件范围的样式。
基本上,您使用 name.module.css
文件名定义样式表并在其中添加常规 CSS。
.hidetheresult {
visibility: hidden;
}
.showtheresult{
visibility: visible;
}
.btn-hidetheresult {
border-color: pink;
}
.btn-showtheresult {
border-color: aqua;
}
现在要使用它,像导入任何 JS 模块一样导入它,
import styles from ''./styles.module.css''
console.log(styles);
// styles => {
// hidetheresult: ''contact_hidetheresult__3LvIF'',// showtheresult: ''contact_showtheresult__N5XLE'',// ''btn-hidetheresult'': ''contact_btn-hidetheresult__3CQHv'',// ''btn-showtheresult'': ''contact_btn-showtheresult__1rM1E''
// }
如您所见,样式已转换为对象,现在您可以使用它们
像 styles.hidetheresult
或 styles[''btn-hidetheresult'']
。
注意样式表中没有元素选择器。那是因为 CSS Modules 重写了类名,但它们不涉及标签名。在 Next.js 中 默认行为。即它不允许元素标签选择器。
带有 *.module.(css | scss | sass)
的文件扩展名是 css 模块,它们只能使用类名或 id 来定位元素,而不能使用标签名称。虽然这在 create-react-app 等其他框架中是可能的,但在 next-js 中是不可能的。
但是您可以在 next.config.js
文件中覆盖它。 (超出本答案的范围)
有一个 article 解释了如何覆盖它。 - 免责声明:我是作者
现在来到您的用例,您可以像这样进行条件样式:(假设样式与答案中给出的示例一致)
import React from "react";
import styles from "./styles.module.css";
const PageX = () => {
const [submitted,setSubmitted] = React.useState(false);
const getStyle = () => {
if (submitted) return styles.showtheresult;
else return styles.hidetheresult;
};
const getButtonStyle = () => {
if (submitted) return styles["btn-showtheresult"];
else return styles["btn-hidetheresult"];
};
return (
<div>
<section className="results">
<h1 className={getStyle()}>Correct?</h1>
<h1 className={getStyle()}>Incorrect?</h1>
<button className={getButtonStyle()} onClick={handleMovClick}>
An instruction
</button>
</section>
</div>
);
};
随着您添加更多条件,方法往往会变得更加复杂。这是classnames 模块派上用场。
import styles from "./styles.module.css";
import clsx from "classnames";
const PageX = () => {
const [submitted,setSubmitted] = React.useState(false);
const headerStyle = clsx({
[styles.showtheresult]: submitted,[styles.hidetheresult]: !submitted,});
const btnStyle = clsx({
[styles["btn-showtheresult"]]: submitted,[styles["btn-hidetheresult"]]: !submitted,});
return (
<div>
<section className="results">
<h1 className={headerStyle}>Correct?</h1>
<h1 className={headerStyle}>Incorrect?</h1>
<button className={btnStyle} onClick={handleMovClick}>
An instruction
</button>
</section>
</div>
);
};
这是一个 CodeSandbox 供您使用:
angular – 在定位ECMAScript 2015模块时无法使用导入分配
import Clipboard = require('clipboard');
我收到以下错误:
[default] c:\xampp\htdocs\isitperfect\node_modules\angular2-clipboard\src\clipboard.directive.ts:2:0 Import assignment cannot be used when targeting ECMAScript 2015 modules. Consider using 'import * as ns from "mod"','import {a} from "mod"','import d from "mod"',or another module format instead.
错误在这一行:
import Clipboard = require('clipboard');
我试过了:
import * as Clipboard from 'clipboard';
和其他一些变化,但无法弄清楚如何解决它.
我正在使用typescript 2.0.0
有任何想法吗?
在tsconfig.json文件中我替换了:
"module": "es6"
同
"module": "commonjs"
并重新启动终端.有效.
css – ReactJS向手动类名添加动态类
<div className="wrapper searchdiv {this.state.something}"> ... </div>
有任何想法吗?
谢谢
解决方法
className = {‘wrapper searchdiv’this.state.something}
或字符串模板版本
带有反引号的className = {`wrapper searchdiv ${this.state.something}`}.
这两种类型当然只是javascript,但是第一种模式是传统的.无论如何,在JSX中,任何用大括号括起来的东西都会被执行为javascript,所以你基本上可以做任何你想要的东西.但是,将JSX字符串和大括号结合在一起就是属性的no-go.
extjs JSONStore的load事件/insert,add方法应用 如何动态改变显示数据
1.场景/功能描述1.1产品分类管理(增加,修改,删除,查询)
1.2产品查询界面,查询下拉条件有:产品分类。
2.分析
业务数据存储在数据库。界面显示时请求web服务器,再而从数据库中读取数据。
相同:场景中1.1查询所有产品分类与1.2加载所有产品分类作为条件,这两部分的数据集一样
不同:场景1.2的数据集需要多一项,“全部”,即用户可选“全部”项,查询所有分类的产品
3.实现
只描述关键代码
方法1:
前台:
Ext.Ajax.request({
extraParams:{'from':'1.1'}//from表示界面源,1.1表示场景1.1
});
后台:
IList<ProductCate> listCate = db.getList("select cateid,catename from tbProductCate ");//读取数据
string _from = Request.From["from"].ToString();
if( _from == "1.2")
{
listCate.insert(0,new ProductCate("-1","全部"));
}
Respone.Write(listCate.toJSON());
Respone.End();
方法2:
在场景1.2部分js代码中,在 productCateJsonStore增加load事件的监听。
var productCateJsonStore = new Ext.data.JSONStore(
...//其他配置简略
listeners : {
load : function()
{
this.insert(0,{cateid:-1,catename:'全部'});
//this.add({cateid:-1,catename:'全部'});是加载到最后面
}
}
);
方法3:
在场景1.2中将下拉框单选改为列表多选。
对比分析:
方法1:比较土,修改代码量少,扩展性中等。
方法2:实现当前需求最简单做法。
方法3:修改代码量大,但用户体验好。
4.扩展
在JSONStore的load事件里,可get某一条数据,然后修改某一项的值,或者remove
转自:http://blog.csdn.net/dafeng168/article/details/6650918
extjs4 treepanel动态改变行高度示例_extjs

//css代码
.x-row-class{
line-height:30px;
}
//js代码
},{
text: ''技能分配'',
flex: 1,
width:150,
dataIndex: ''skillDistribut'',
sortable: true,
renderer:function(value, metaData, record, rowIndex, columnIndex, store){
metaData.tdAttr= "data-qtip=''" + value + "''";
if (record.data.outboundAmount==1) {
metaData.tdCls=''x-grid-record-red'';
}
return value;
}
},{
关于Next.js - 使用 CSS 模块时无法应用动态类名和css不生效的原因的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于angular – 在定位ECMAScript 2015模块时无法使用导入分配、css – ReactJS向手动类名添加动态类、extjs JSONStore的load事件/insert,add方法应用 如何动态改变显示数据、extjs4 treepanel动态改变行高度示例_extjs的相关信息,请在本站寻找。
本文标签: