vue,react的项目,有没有办法统一去掉所有输入内容的前后空格(输入框,文本框之类的)?
由于项目技术栈有vue,react,我有如下想法:
1.给对应组件封一层,但这样改动量比较大,而且需要所有项目都接入封装的组件
2.统一给axios或干脆给fetch做拦截,处理所有入参的前后空格,但一时也没想到有什么影响,且也需要各系统接入/改造
请问各位大佬有无更合适,侵入性更小的方式
补充:
我想了下还可以委托change事件到body上,然后通过event改变input的value
回答:
vue 的话,可以使用 .trim
修饰符。
统一处理的方案听上去都会存在未知风险,且无法规避。所以建议还是由使用方主动选择。
当然,如果你有固定组件,那么你可以考虑覆盖它。这样行为更加可控。
本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。
回答:
可以考虑使用HOC(Higher Order Component)或者装饰器模式给组件进行封装,这样可以避免修改原组件代码。在封装的组件中,可以对输入框的change事件进行拦截,去掉前后空格后再传递给原组件,例如:
import React from 'react';
function trimInputWrapper(WrappedComponent) {
return class TrimInputWrapper extends React.Component {
handleInputChange = (event) => {
const { value } = event.target;
const trimValue = value.trim();
event.target.value = trimValue; // 修改输入框的值
this.props.onChange(event); // 传递给原组件的onChange事件
}
render() {
return <WrappedComponent {...this.props} onChange={this.handleInputChange} />;
}
};
}
export default trimInputWrapper;
使用时只需要将需要去掉前后空格的输入框组件进行封装,例如:
import React from 'react';import trimInputWrapper from './trimInputWrapper';
class MyInput extends React.Component {
render() {
return <input type="text" {...this.props} />;
}
}
export default trimInputWrapper(MyInput);
对于Vue项目,也可以使用类似的方法进行封装。
关于在axios或fetch中拦截处理前后空格,可以使用axios的拦截器或者fetch的中间件来实现,例如:
import axios from 'axios';axios.interceptors.request.use(config => {
// 处理所有请求参数的前后空格
const params = config.params || {};
for (const key in params) {
if (typeof params[key] === 'string') {
params[key] = params[key].trim();
}
}
// 处理所有请求体的前后空格
const data = config.data || {};
for (const key in data) {
if (typeof data[key] === 'string') {
data[key] = data[key].trim();
}
}
return config;
}, error => {
return Promise.reject(error);
});
对于fetch的中间件,可以使用类似的方法实现。这样可以避免在每个请求中都手动去掉前后空格。
回答:
项目中采用了方案2在axios处理了入参前后空格,影响要自己考虑自己项目需求,我们项目不存在需要头尾输入空格的情况,因此没有什么影响,只是需要明确告知相关人员加入了这部分处理
以上是 vue,react的项目,有没有办法统一去掉所有输入内容的前后空格(输入框,文本框之类的)? 的全部内容, 来源链接: utcz.com/p/933884.html