美文网首页React 生态圈
最近学了啥(一)

最近学了啥(一)

作者: 梁相辉 | 来源:发表于2017-08-03 17:09 被阅读279次
  • 如果你有两个相邻的文本位,且希望它们的padding差不多一个空格,那你可以试试1ch。{ padding-left: 1ch }
    扩展阅读
  • 你知道vertical-align可以用百分比吗?如果你发现vertical-align: super或top不是你想要的那样,别去加position: relative; top: -3px之类的代码,试试看vertical-align: 30%吧。
  • input 的宽度一定要注意,当它宽度低于某个临界值时候,它的宽度将停留在这个临界值,导致有些时候布局麻烦,所以最好给它设置个安全的最小宽度,比如 min-width: 10px。
  • input,image,iframe 等不支持伪元素。
  • 在 <input> 或 <textarea> 可以使用 oninput 事件,它在元素的值发生变化时立即触发,而 onchange 在元素失去焦点时触发。另一点,onchange 事件也可作用于 <keygen> 和 <select> 元素。
  • 如果你需要在组件中使用 setInterval 或者 setTimeout,那你需要这样调用。 扩展阅读
compnentDidMount() {
 this._timeoutId = setTimeout( this.doFutureStuff, 1000 );
 this._intervalId = setInterval( this.doStuffRepeatedly, 5000 );
}
componentWillUnmount() {
 clearTimeout( this._timeoutId );
 clearInterval( this._intervalId );
}
  • 如果你需要使用 requestAnimationFrame() 执行一个动画循环
// How to ensure that our animation loop ends on component unount
componentDidMount() {
  this.startLoop();
}

componentWillUnmount() {
  this.stopLoop();
}

startLoop() {
  if( !this._frameId ) {
    this._frameId = window.requestAnimationFrame( this.loop );
  }
}

loop() {
  // perform loop work here
  this.theoreticalComponentAnimationFunction()
  
  // Set up next iteration of the loop
  this.frameId = window.requestAnimationFrame( this.loop )
}

stopLoop() {
  window.cancelAnimationFrame( this._frameId );
  // Note: no need to worry if the loop has already been cancelled
  // cancelAnimationFrame() won't throw an error
}
  • 媒体查询
@media screen and (max-width: 500px) and (min-resolution: 2dppx) {
    .yourLayout {
        width:100%;
    }
}
  • 图片加载新方式
537f5932ly1ffrotx8adqj21kw162gxx.jpg
  • 获取元素尺寸知多少
![a2.png](http:https://img.haomeiwen.com/i111568/40e1fbc6a94bc222.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
  • 关于数字
// 无效语法:
42.toFixed( 3 ); // SyntaxError
// 下面的语法都有效:
(42).toFixed( 3 ); // "42.000"
0.42.toFixed( 3 ); // "0.420"
42..toFixed( 3 ); // "42.000"
42 .toFixed(3); // "42.000"
  • 简单值总是通过值赋值的方式来赋值(null, undefined, string, number, bool, symbol ),复合值总是通过引用复制的方式来赋值。
var a = 1;
b = a;
b++
a // 1
b // 2

var arr = [1, 2, 3]
brr = arr
arr.push(4)
arr // [1, 2, 3, 4]
brr // [1, 2, 3, 4]
  • 常用的返回毫秒数
+ new Date()

更优雅的方式
(new Date()).getTime()

Date.now()
  • 数组的一些处理
CallApi(`/message/${id}`, null, 'DELETE').then(r => {
  if (r.code === 'SUCCESS') {
    let index = this.state.messages.findIndex(i => i.id == id);
    // 快速复制一个新数组
    let newArr = [...this.state.messages];
    newArr.splice(index, 1);
    this.setState(s => ({messages: newArr}))
  } else {
    r.msg && Toast.info(r.msg)
  }
});
// 解构,如果需要改变变量名
let { message: newMessage } = this.state
  • 对价格数组进行去0操作,最多保留两位数
function myNum(s) {
  var s1 = +s;
  if(!s1) return 0;
  var s2 = s1.toFixed(2) ;
  if(s2.substr(-1) !== '0'){
    return s2
  } else if(s2.substr(-2,1) !== '0' && s2.substr(-1) === '0'){
    return s1.toFixed(1)
  } else {return s1.toFixed(0)}
}
  • 正则匹配
'font-size:20px'.replace(/:\s*(\d+)px/g, (a,b)=>{
               return `:${b*0.02}rem`
            })
  • 如何写一个类似antd Toast 的组件
import React from 'react';
import {render} from "react-dom";
import {Toast} from 'react-weui';

class ToastContainer extends React.PureComponent {
    state={show: true};
    componentDidMount() {
        const {timer, cb} = this.props;
        setTimeout(() => {this.setState({show: false}); cb && cb()}, timer*1000)
    }
    render() {
        const {type, content} = this.props;
        const {show} = this.state;
        return (
            show && <Toast icon={type} show={true}>{content}</Toast>
        )
    }
}

function hide() {
    render(<div />, document.getElementById('toast'))
}

function notice(content, timer, cb, type) {
    hide();
    const root = React.createElement(ToastContainer, {content, timer, cb, type});
    render(root, document.getElementById('toast'))
}


export default {
    success: (content, timer=3, cb) => notice(content, timer, cb, 'success-no-circle'),
    fail: (content, timer=3, cb) => notice(content, timer, cb, 'cancel'),
    info: (content, timer=3, cb) => notice(content, timer, cb, 'info-circle'),
    loading: (content, timer=3, cb) => notice(content, timer, cb, 'loading'),
    hide: () => hide()
};
  • 微信页面,长按会弹出系统菜单如何解决?
    有一个按钮,用户需要长按它说话,但是显示在微信里面的网页,长按会出现复制的菜单,造成用户体验不流畅。
    如何解决呢?
  1. 首先为按钮添加样式 user-select:none
  2. 其次在按钮的 onTouchStart 事件上这样组织代码
onTouchStart = e => {
    e.preventDefault();
    setTimeout(() => { 你的核心代码 }, 0)
}

相关文章

  • 最近学了啥(一)

    如果你有两个相邻的文本位,且希望它们的padding差不多一个空格,那你可以试试1ch。{ padding-lef...

  • 学了啥

    看了一下午的新课标解读大概懂了那么一点,程晓堂教授解读了新课标的理论 我认为由原来的双基 三维目标,五维目标到现在...

  • 暑假学了啥?

    “纷纷红紫已成尘,布谷声中夏令新”不知不觉中,快乐又充实的暑假作文集训已经学习完了。 快来看看,这个暑...

  • 今天 Python 学了啥

    Git 使用 Git 学起来后还发现蛮复杂的。明天继续学咯。 安装和设置 本地文件管理 远程到本地 本地到远程 S...

  • 读书学了啥

    读书是为了什么 高中以及高中以前一直都在重点学校重点班,成绩不错。高中时候压力很大,家人对我期望比较大。最...

  • 上学学了啥?

    一直被问的就是,上学学了啥 没有教待人处事,没有教 应该是曾和很棒的人平起平坐 谈古论今的那些人 会在课桌贴座右铭...

  • 回顾今年学了啥

    时间过得好快,一转眼就到了十一月底了,还有不到四十天今年就要结束了,回想这一年,除了印象深刻的疫情反复影响到正常的...

  • 这几年学了啥?

    这是我每天写一篇原创文章的第1712天 反思这几年,我学到了啥? 要说专业技术能力的提升,还是有点的。 但是,不明...

  • 最近做了啥

    最近看了一部电视剧《香蜜沉沉烬如霜》 就看这部电视剧写了三篇文章。几乎每一集都有触动到我的地方。我第一天看的时候,...

  • 最近看了啥👀

    说说我最近在看的影视作品吧,我是属于在一段时间内看的比较泛的那种奇怪青年,甚至包括动漫也会看。 下面是具体的名单:...

网友评论

本文标题:最近学了啥(一)

本文链接:https://www.haomeiwen.com/subject/mqmrittx.html