1.yarn create react-app my-app// 解构this.propslet { avatar, username, content, id } = this.props;// 记着这么写 优化:如果state是同一个引用就不再渲染一次2.export default class App extends React.PureComponent 3. // react 最好不要操作同一个对象 // 每次更新状态都需要返回一个新的状态 PureComponent // PureComponent 优化了 shouldComponentUpdate方法,发现如果返回的是一个状态还是以前的引用地址不会更新 // 必须返回新对象 如果我们这么做: this.state.users.push({ avatar: '', content: val, username: 'zfpx' }) 那么就会发现这个同一个对象this.state.users 指向同一个hash值,就不会触发视图更新 let users = [...this.state.users, { avatar: '', content: val, username: 'zfpx' }];4.res = await axios.get('/user.json') 返回的是请求到的数据 axios.get('/user.json') 返回的是一个promise await 后面如果是一个promise的话,返回的就是promise返回的结果,这里就是数据 这个其实和axios.get('/user.json').then(res => {.........})是一样的,只不过这里是直接拿到了res,可以在下面写应用res了5.拦截器:这么写是为了返回的数据可以直接用,不用层层嵌套,其实就是修改响应对象responseaxios.interceptors.response.use(function (res) { if (res.data.code === 0) { return res.data.users } else { return Promise.reject('错误'); }})7. 这个双括号是什么意思 就是value是传入了一个对象,有两个属性,increment和color8.父组件给子组件传参数:{...this.state}
上面的{...this.state} 其实就是看state中有什么,如果有的话就全部拿出来 子组件给父组件传值: 比如上面这个removeById,父给子传一个函数,在子组件回调,子组件在调用时传入自己的状态 依赖 props 来传递事件的引用,并通过回调的方式来实现的,这样实现不是特别好,但在没有任何工具的情况下是一种简单的实现方式。 react中当state发生改变时,组件才会update。在父组件中设定state的初始值以及处理该state的函数, 同时将函数名通过以props属性值的形式传入子组件,子组件通过调用父组件的函数,进而引起state变化,达到在父组件中展示子组件产生的变化。 handleSubmit =(e)=>{ // 取消form表单的默认发送数据功能 e.preventDefault(); this.props.addUser(this.content.current.value); }9.受控组件:受状态控制 let val = e.target.name 怎么把一个变量设置为一个对象的属性 this.setState({ [val]:e.target.value })10.非受控组件:操作dom,很方便 b=React.createRef(); handleClick = () =>{ 拿到input 的 value alert(this.a.value); // 写法1 alert(this.b.current.value) // 写法2 } render(){ return ( // 第一种: 用dom 和 this.a 把this和dom关联起来
this.a=dom}/> // 第二种:用b=React.createRef(); ref={this.b}关联起来
) }复制代码