标签:ops mock 结合 opacity 解决方法 异步 ora .com dom操作
2.immutable: state不允许我们做任何的改变,所以拷贝一份list,修改完再用setSate设置
removeClick(index) {
// immutable
// state不允许我们做任何的改变,所以拷贝一份list,修改完再用setSate设置,不建议用以下写法
// this.state.list.splice(index, 1);
// this.setState({
// list: this.state.list
// })
const list = [...this.state.list];
list.splice(index, 1);
this.setState({
list: list
});
}
3.Uncaught Error: Can only set one of children
or props.dangerouslySetInnerHTML
解决方法
1.bind: 绑定this使得this指向组件todolist
this.handleChange = this.handleChange.bind(this);
this.handClick = this.handClick.bind(this);
or
在事件后面直接绑定: {this.handleChange.bind(this)}
bind还可以把下标index传过去
<button onClick={ this.removeClick.bind(this, index)
removeClick(index) {
const list = [...this.state.list];
list.splice(index, 1);
this.setState({
list: list
});
}
2.input里的值通过e传递。
handleChange(e) {
// console.log(this);
this.setState({
inpputValue: e.target.value
})
}
3.angerouslySetInnerHTML: 为了防xss攻击
4.propTypes: 用于传值校验,避免传过来的值类型错误。
import PropTypes from ‘prop-types‘;
// 用于传值校验,避免传过来的值类型错误。
TodoItem.propTypes = {
content: PropTypes.string,
delete: PropTypes.func,
index: PropTypes.number
}
假如把content: PropTypes.string
改成content: PropTypes.number
,则会警告,因为content是字符串类型,不是数字类型。
[](https://user-gold-cdn.xitu.io/2019/1/31/168a203baefb19d4?w=563&h=67&f=png&s=14767
5.defaultProps:用于设置isRequired的默认值
// 用于设置isRequired的默认值
TodoItem.defaultProps = {
test: ‘Hello World‘
}
6.props, state的每次改变都会引发render函数。
7.DOM操作的三个方案
第一种方案:
缺陷:
第二种方案:
缺陷: 性能的提升并不明显
第三种方案:
<div id=‘abc‘><span>hello world</span></div>
优点:
diff算法
8.JSX原理
JSX->createElement->虚拟DOM(js对象)->真是的DOM
9.ref: 用来操作DOM,但不建议使用,一般在动画时要操作DOM才使用。
<input id = "insertArea" ref={(input)=>{this.input=input}}/>
this.input.value==e.target.value;
注意在setState中使用时,因为setSate是异步的,直接写console.log(this.ul.querySelectorAll(‘div‘).length);
就会使得在setSta之前执行,所以要这样使用
handleClick() {
this.setState((prevState)=>({
list: [...prevState.list, prevState.inputValue],
inputValue: ‘‘
}), ()=>{
console.log(this.ul.querySelectorAll(‘div‘).length);
})
}
10.生命周期函数指在某一时刻组件会自动调用执行的s函数
11.react性能优化
12.在react里使用ajax,用axios在componentDidMount里使用
13.利用Charles工具mock数据
axios.get(‘/api/todolist‘)
.then((res)=>{
this.setState(()=>({
list: [...res.data]
}))
})
.catch(()=>alert(‘error‘))
14.css过渡动画和动画
.show {
/* opacity: 1;
transition: all 1s ease-in; */
animation: show-item 2s ease-in forwards;
}
.hide {
/* opacity: 0; */
/* transition: all 1s ease-in; */
animation: hide-item 2s ease-in forwards;
}
@keyframes show-item {
0% {
opacity: 0;
color: deeppink;
}
50% {
opacity: 0.5;
color: pink;
}
100% {
opacity: 1;
color: purple;
}
}
@keyframes hide-item {
0% {
opacity: 1;
color: deeppink;
}
50% {
opacity: 0.5;
color: pink;
}
100% {
opacity: 0;
color: purple;
}
}
15.redux
由于一些中大型项目中,组件之间的传值比较复杂,所以就要引入redux来管理数据状态。
redux原理
实现redux: 在store文件夹里实现store,然后在组件中使用,通过store.subscribe(this.handleStoreChange)订阅,通过store.dispatch(action)修改store
基础API
三大原则:
16.UI组件、容器组件、无状态组件
无状态组件好处:提高性能,它只是一个函数,而写成类,有周期函数,渲染比较慢
标签:ops mock 结合 opacity 解决方法 异步 ora .com dom操作
原文地址:https://www.cnblogs.com/Jomsou/p/10341263.html