css-in-js 之 vue

文章介绍了如何在Vue项目中使用vue-styled-components库来实现CSS-in-JS,允许用JS编写CSS样式。通过示例展示了如何封装组件,接受props并动态地应用样式。最后提到了这种方法将所有样式合并到一个类中,提高了渲染速度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CSS-in-JS就是可以使用JS来编写CSS样式,这原本是React的专属,现在可以在Vue中应用,依赖包:vue-styled-components

需要安装以下依赖:

$ npm i vue-styled-components @vue/babel-helper-vue-jsx-merge-props  @vue/babel-preset-jsx  --save-dev

并修改 babel.config.js

presets: [
		...,
		'@vue/babel-preset-jsx'
	],
1、组件封装
import styled from 'vue-styled-components';
import Vue from 'vue';

const img = require('@/assets/images/brain/data-changdao/scenic-point-bg.png');
const img1 = require('@/assets/images/brain/data-changdao/scenic-point.png');

// 通过 props 给组件传参,并动态的传递到css中
const div1 = styled('div', {
	width: {
		type: Number,
		default: 10
	}
})`
	width: ${props => props.width}rem;
	height: 0.62rem;
	margin-bottom: 0.6rem;
	padding: 0 0.36rem;
	background: url(${img}) no-repeat;
	background-size: contain;
`;
const div11 = styled.div`
	font-size: 0.38rem;
	font-family: PingFang SC;
	font-weight: 500;
	color: #FFFFFF;
`;
const div11_img = styled.img`
	width: 0.43rem;
	height: 0.4rem;
	margin-right: 0.17rem;
`;
const div11_span = styled.span`
	display: inline-block;
	width: 3.5rem;
	overflow: hidden;
	white-space: nowrap;
	text-overflow: ellipsis;
`;
const div12 = styled.div`
	font-size: 0.48rem;
	font-family: PingFang SC;
	font-weight: 600;
	color: #FFFFFF;
`;
const div12_span1 = styled.span``;
const div12_span2 = styled.span`
	font-size: 0.33rem;
	color: rgba(255, 255, 255, 0.6);
`;

export default Vue.component('Scenic', {
	props: {
		scenicTicketName: String,
		count: String,
		pe: String
	},
	render: function (h) {
		return (
			<div1 class='flex f-jc-sb' width={ this.pe }>
				<div11>
					<div11_img src={img1} />
					<div11_span>{ this.scenicTicketName }</div11_span>
				</div11>
				<div12>
					<div12_span1>{ this.count }</div12_span1>
					<div12_span2>{ this.pe }%</div12_span2>
				</div12>
			</div1>
		);
	}
});

2、父组件中使用
<ScenicContainer
	v-for="(item, index) in hotScenic"
	:key="index"
	:scenicTicketName="item.scenic_ticket_name"
	:count="item.count"
	:pe="item.pe"
/>

编译后的结果:
写在js中的样式都编译到一个随机名称的class中去了。

特点:将所有的css样式全部都编辑到一个随机名字的class中去了。相比于vue 的属性选择器,渲染速度要快一点。

### 解决 Cursor 错误请求被阻止问题 当遇到 `cursor error` 并提示由于可疑活动而导致请求被阻止的情况时,通常是因为服务器检测到异常行为并采取了安全措施。以下是可能的原因以及解决方案: #### 可能原因分析 1. **IP 地址被列入黑名单** 如果客户端的 IP 被认为存在恶意行为,则可能会触发服务器的安全机制,从而导致请求被拒绝[^1]。 2. **频繁访问或超出速率限制** 过多的 API 请求可能导致服务器将其视为潜在威胁,并暂时封锁该连接[^2]。 3. **不合法的身份验证令牌** 使用过期或者伪造的身份验证令牌也可能引发此类错误消息[^3]。 4. **浏览器插件干扰** 某些广告拦截器或其他扩展程序可能会影响正常的网络通信过程,进而造成类似的错误现象[^4]。 5. **数据库游标超时设置不当** 对于某些应用而言,“cursor”指代的是数据库查询中的游标对象;如果长时间未操作而使得会话断开,则同样会出现上述状况[^5]。 #### 针对性解决办法 - **确认当前使用的 IP 是否正常** 尝试更换不同的网络环境重新发起尝试,观察是否有改善效果。 - **调整请求频率至合理范围之内** 查阅目标服务文档了解其允许的最大 QPS (Queries Per Second),据此优化自己的调用逻辑以满足规定条件。 - **更新认证凭证** 确认所依赖的所有授权信息均处于有效期内,并按照官方指南完成必要的刷新流程。 - **禁用第三方软件影响因素** 测试期间可以考虑临时关闭那些已安装但不确定作用的附加组件来排除它们带来的副作用。 - **适当延长 cursor 的存活周期** 根据实际需求修改相关参数配置文件里的 timeout 值,给予更充裕的时间窗口处理数据读取任务。 ```javascript // 示例代码展示如何通过 MongoDB 设置更大的批处理大小和增加生存时间 const MongoClient = require('mongodb').MongoClient; let client; async function main() { const uri = 'your_connection_string'; client = new MongoClient(uri, { useNewUrlParser: true }); await client.connect(); const collection = client.db("test").collection("accounts"); let cursor = collection.find().batchSize(10).noCursorTimeout(true); } main() .then(() => console.log("Operation completed")) .catch(err => console.error(`An error occurred while running the script: ${err}`)) .finally(() => client.close()); ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值