自学几个月前端,为什么感觉什么都没学到??
这种现象在很多的初学者和自学前端的同学中是比较的常见的。
因为自学走的弯路是比较的多的,会踩很多的坑,学习的过程中是比较的迷茫的。
最重要的是,在学习的过程中,不知道每个部分该学哪些知识点,学到什么程度才算好,学了能做什么。
很多自学的朋友往往都是自己去找资料学习的,资料上有的或许就学到了,资料上没有的或许就没有学到。
这就会给人一个错误的信息就是,我把资料上的学完了,估计也-就差不多的了。
但是真的是这样的吗?非也,因为很多人找的资料就是很基础的。学完了也就是掌握一点基础的东西。分享给你一份前端分析路线,你可以参考。
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
还有很多的同学在学习的过程中一味的追求学的速度,很快速的刷视频,写了后面忘了前面,最后什么都没有学到,什么都知道,但是什么都不懂,要具体说,也说不出个所以然。
所以学习编程一定要注重实践操作,练习敲代码的时间一定要多余看视频的时间。
这里是标题
React实现
React
连插槽都没有, 更别提具名插槽了,但是没有不代表不能模拟出来。对于React
的props
,我们不仅仅可以传入普通的属性,还可以传入一个函数,这时候我们就可以在传入的这个函数里面返回JSX
,从而就实现了具名插槽的功能。
- 对原有的
Card
组件进行修改
import React from ‘react’
export interface CardProps {
title?: string,
// 加入了一个renderTitle属性,属性类型是Function
renderTitle?: Function,
children: React.ReactNode
}
export default function(props: CardProps) {
const {title, renderTitle} = props
// 如果指定了renderTtile,则使用renderTitle,否则使用默认的title
let titleEl = renderTitle ? renderTitle() : {title}
return (
{/**每个组件都可以获取到 props.children。它包含组件的开始标签和结束标签之间的内容 */}
{props.children}
);
}
- 这时候就可以在外部自定义
title
了
import React from ‘react’
import Card from ‘./components/Card’
export default function () {
return (
<Card renderTitle={
() => {
return 我是自定义的标题
}
}>
);
}
作用域插槽
有时让插槽内容能够访问子组件中才有的数据是很有用的,这个就是Vue
提供作用域插槽的原因。我们继续使用上面的Card
组件为例,现在我基于上面的卡片组件开发了一个人员信息卡片组件,用户直接使用人员信息卡片组件就可以将人员信息显示到界面中,但是在某些业务模块需要自定义人员信息显示方式,这时候我们就需要使用到作用域插槽了。
Vue
实现
- 实现用户信息卡片组件,里面使用了作用域插槽
姓名: {{ userInfo.name }}
性别: {{ userInfo.sex }}
年龄: {{ userInfo.age }}
- 在外部使用人员信息组件
- 姓名: {{ userInfo.name }}
- 年龄: {{ userInfo.age }}
React
实现在具名插槽那一小节我们通过给组件传入了一个函数,然后在函数中返回
JSX
的方式来模拟了具名插槽,那么对于作用域插槽,我们依然可以使用函数的这种方式,而作用域插槽传递的参数我们可以使用给函数传参的方式来替代- 实现人员信息卡片组件
import React, { useState } from ‘react’
import Card from ‘./Card’
interface UserCardProps {
renderUserInfo?: Function
}
export interface UserInfo {
name: string;
age: number;
sex: string;
}
export default function(props: UserCardProps) {
const [userInfo] = useState({
name: “张三”,
age: 25,
sex: “男”,
});
const content = props.renderUserInfo ? (
props.renderUserInfo(userInfo)
) : (
姓名: {userInfo.name}
年龄: {userInfo.age}
性别: {userInfo.sex}
);
return
{content}
}
- 在外部使用人员信息卡片组件
import React from ‘react’
import UserCard, { UserInfo } from “./components/UserCard”;
export default function () {
return (
<UserCard
renderUserInfo={(userInfo: UserInfo) => {
return (
- 姓名: {userInfo.name}
);
}}
);
}
Context
,React
中的provide/inject
通常我们在项目开发中,对于多组件之间的状态管理,在
Vue
中会使用到Vuex
,在React
中会使用到redux
或者Mobx
,但对于小项目来说,使用这些状态管理库就显得比较大材小用了,那么在不使用这些库的情况下,如何去完成数据管理呢?比如面试最常问的祖孙组件通信。在Vue
中我们可以使用provide/inject
,在React
中我们可以使用Context
。假设有这样一个场景,系统现在需要提供一个换肤功能,用户可以切换皮肤,现在我们分别使用
Vue
和React
来实现这个功能。Vue
中的provide/inject
在
Vue
中我们可以使用provide/inject
来实现跨多级组件进行传值,就以上面所说场景为例,我们使用provide/inject
来实现以下首先,修改
App.vue
内容为以下内容然后在任意层级的子组件中像下面这样使用
这样就可以实现
theme
在所有子组件中进行共享了React
中的Context
在
Vue
中我们使用provide/inject
实现了组件跨层级传值功能,在React
中也提供了类似的功能即Context
,下面我们使用Context
来实现相同的功能。在项目
src
目录下新建context
目录,添加MyContext.js
文件,然后添加以下内容import {createContext} from ‘react’
// 定义 MyContext,指定默认的主题为
light
export const MyContext = createContext({
theme: ‘light’
})
MyContext
提供了一个Provider
,通过Provider
可以将theme
共享到所有的子组件。现在我们在所有的组件的共同父组件比如App.js
上面添加MyContext.Provider
将theme
共享出去import { MyContext } from ‘@/context/MyContext’;
export default function() {
const [theme, setTheme] = useState(‘dark’)
return (
<MyContext.Provider
value={{
theme
}}
</MyContext.Provider>
)
}
然后这时候就可以直接在所有的子组件里面使用定义的主题
theme
了import React, { useContext } from ‘react’
import { MyContext } from ‘@/context/MyContext’;
export default function() {
const {theme} = useContext(MyContext)
return <div className={
child-${theme}
}>}
没有了
v-model
,但也不影响使用我们知道
React
和Vue
都是单向数据流的,即数据的流向都是由外层向内层组件进行传递和更新的,比如下面这段React
代码就是标准的单向数据流.import React, { useState } from “react”;
export default function(){
const [name] = useState(‘子君’)
return
}
在
vue
中使用v-model
如上代码,我们在通过通过
value
属性将外部的值传递给了input
组件,这个就是一个简单的单向数据流。但是在使用Vue
的时候,还有两个比较特殊的语法糖v-model
和.sync
,这两个语法糖可以让Vue
组件拥有双向数据绑定的能力,比如下面的代码通过
v-model
,当用户修改input
的值的时候,外部的name
的值也将同步被修改。但这是Vue
的语法糖啊,React
是不支持的,所以React
应该怎么办呢?这时候再想想自定义v-model
,v-model
实际上是通过定义value
属性同时监听input
事件来实现的,比如这样:<input :value=“value” @input=“$_handleChange”/>
在
react
寻找v-model
替代方案同理,
React
虽然没有v-model
语法糖,但是也可以通过传入属性然后监听事件来实现数据的双向绑定。import React, { useState } from ‘react’
export default function() {
const [name, setName] = useState(‘子君’)
const handleChange = (e) => {
setName(e.target.value)
}
return
}
小编刚开始使用
react
,感觉没有v-model
就显得比较麻烦,不过麻烦归麻烦,代码改写也要写。就像上文代码一样,每一个表单元素都需要监听onChange
事件,越发显得麻烦了,这时候就可以考虑将多个onChange
事件合并成一个,比如像下面代码这样import React, { useState } from ‘react’
export default function () {
const [name, setName] = useState(‘子君’)
const [sex, setSex] = useState(‘男’)
const handleChange = (e:any, method: Function) => {
method(e.target.value)
}
return
<input value={name} onChange={(e) => handleChange(e, setName)}>
<input value={sex} onChange={(e) => handleChange(e, setSex)}>
}
没有了指令,我感觉好迷茫
在
Vue
中我们一般绘制页面都会使用到template
,template
里面提供了大量的指令帮助我们完成业务开发,但是在React
中使用的是JSX
,并没有指令,那么我们应该怎么做呢?下面我们就将Vue
中最常用的一些指令转换为JSX
里面的语法(注意: 在Vue中也可以使用JSX
)v-show
与v-if
在
Vue
中我们隐藏显示元素可以使用v-show
或者v-if
,当然这两者的使用场景是有所不同的,v-show
是通过设置元素的display
样式来显示隐藏元素的,而v-if
隐藏元素是直接将元素从dom
中移除掉。- 看一下
Vue
中的v-show
与v-if
的用法
姓名:{{ name }}
{{ dept }}
- 将
v-show
,v-if
转换为JSX
中的语法
在
Vue
中指令是为了在template
方便动态操作数据而存在的,但是到了React
中我们写的是JSX
,可以直接使用JS
,所以指令是不需要存在的,那么上面的v-show
,v-if
如何在JSX
中替代呢import React, { useState } from ‘react’
export default function() {
const [showName] = useState(false)
const [showDept] = useState(true)
const [userInfo] = useState({
name:‘子君’,
dept: ‘银河帝国’
})
return (
{/**模拟 v-show */}
<span style={{display: showName ? ‘block’ : ‘none’}}>{userInfo.name}
{/**模拟 v-if */}
{showDept ? {userInfo.dept}: undefined}
)
}
v-for
v-for
在Vue
中是用来遍历数据的,同时我们在使用v-for
的时候需要给元素指定key
,key
的值一般是数据的id
或者其他唯一且固定的值。不仅在Vue
中,在React
中也是存在key
的,两者的key
存在的意义基本一致,都是为了优化虚拟DOM
diff
算法而存在的。- 在
Vue
中使用v-for
最后
本人分享一下这次字节跳动、美团、头条等大厂的面试真题涉及到的知识点,以及我个人的学习方法、学习路线等,当然也整理了一些学习文档资料出来是给大家的。知识点涉及比较全面,包括但不限于前端基础,HTML,CSS,JavaScript,Vue,ES6,HTTP,浏览器,算法等等
前端视频资料:
react’
export default function() {
const [showName] = useState(false)
const [showDept] = useState(true)
const [userInfo] = useState({
name:‘子君’,
dept: ‘银河帝国’
})
return (
{/**模拟 v-show */}
<span style={{display: showName ? ‘block’ : ‘none’}}>{userInfo.name}
{/**模拟 v-if */}
{showDept ? {userInfo.dept}: undefined}
)
}
v-for
v-for
在Vue
中是用来遍历数据的,同时我们在使用v-for
的时候需要给元素指定key
,key
的值一般是数据的id
或者其他唯一且固定的值。不仅在Vue
中,在React
中也是存在key
的,两者的key
存在的意义基本一致,都是为了优化虚拟DOM
diff
算法而存在的。- 在
Vue
中使用v-for
最后
本人分享一下这次字节跳动、美团、头条等大厂的面试真题涉及到的知识点,以及我个人的学习方法、学习路线等,当然也整理了一些学习文档资料出来是给大家的。知识点涉及比较全面,包括但不限于前端基础,HTML,CSS,JavaScript,Vue,ES6,HTTP,浏览器,算法等等
[外链图片转存中…(img-tcVe4x2E-1715754998560)]
前端视频资料:
[外链图片转存中…(img-Oa4pD4Rn-1715754998562)]- 看一下