Preguntas de entrevista para React:React面试题与强化学习
【免费下载链接】preguntas-entrevista-react Preguntas típicas sobre React para entrevistas de trabajo ⚛️ 项目地址: https://gitcode.***/gh_mirrors/pr/preguntas-entrevista-react
在前端开发领域,React作为构建用户界面的主流框架,已成为面试中的高频考点。本文精选React核心面试题,从基础概念到性能优化,结合实战代码示例,助你系统掌握React知识体系,轻松应对面试挑战。
一、React基础核心概念
1.1 什么是React?
React是一个用于构建用户界面的JavaScript库,采用组件化思想,允许开发者创建可复用的UI组件。它由Facebook开发并维护,目前已被***flix、Airbnb等众多企业广泛采用。
React的核心理念是"声明式编程",开发者只需描述界面应该是什么样子,而非如何实现,大大简化了复杂UI的开发流程。
1.2 React的主要特性
React具有以下关键特性:
- 组件化:UI被拆分为独立可复用的组件
- 虚拟DOM(Virtual DOM):内存中的DOM表示,提高渲染性能
- 声明式编程:关注"是什么"而非"怎么做"
- 单向数据流:数据从父组件流向子组件
- 跨平台兼容:可用于Web、移动应用(React Native)和服务器渲染
项目中相关组件示例:app/***ponents/,包含了Card、Button等基础UI组件的实现。
1.3 JSX是什么?
JSX是JavaScript的扩展语法,允许在JavaScript中编写类似HTML的代码。它不是必需的,但能极大提高React代码的可读性和开发效率。
// JSX语法示例
function Hello() {
return <h1>Hola Mundo 👋🌍!</h1>
}
JSX会被Babel等工具转换为React.createElement调用,例如上述代码会转换为:
React.createElement('h1', null, 'Hola Mundo 👋🌍!')
二、组件与Props
2.1 如何创建React组件?
React组件可以通过函数或类来创建,目前推荐使用函数组件:
// 函数组件
function HelloWorld() {
return <h1>Hello World!</h1>
}
// 类组件(不推荐)
class HelloWorld extends ***ponent {
render() {
return <h1>Hello World!</h1>
}
}
组件命名必须以大写字母开头,以便React区分组件和普通HTML元素。项目中的app/Title.jsx就是一个典型的函数组件。
2.2 Props的作用与使用
Props(属性)是组件间传递数据的方式,类似于函数参数。Props是只读的,不能在子组件中修改。
// 定义带Props的组件
function Button(props) {
return <button>{props.text}</button>
}
// 使用组件并传递Props
<Button text="点击这里" />
特殊的children prop用于传递组件的子元素:
function Card(props) {
return (
<div className='card'>
<h2>{props.title}</h2>
<div>{props.children}</div>
</div>
)
}
// 使用children prop
<Card title='我的卡片'>
<p>这是卡片内容</p>
</Card>
三、状态管理与生命周期
3.1 Props与State的区别
Props和State都用于影响组件渲染,但有本质区别:
- Props:从父组件接收,只读不可修改
-
State:组件内部管理,可通过
setState或useState更新
function Counter() {
// 使用useState定义状态
const [count, setCount] = useState(0);
return (
<div>
<p>计数: {count}</p>
<button onClick={() => setCount(count + 1)}>增加</button>
</div>
);
}
3.2 如何正确使用State?
更新State时应注意:
- 不要直接修改State,应使用更新函数
- State更新可能是异步的,如需基于前一个状态更新,应使用函数形式
// 错误方式
this.state.count = 1;
// 正确方式
this.setState({ count: 1 });
// 基于前一个状态更新
this.setState(prevState => ({ count: prevState.count + 1 }));
四、React Hooks深入理解
4.1 什么是Hooks?
Hooks是React 16.8引入的特性,允许函数组件使用状态和其他React特性,无需编写类组件。
常用的Hooks包括:
-
useState:管理组件状态 -
useEffect:处理副作用 -
useContext:访问上下文 -
useRef:访问DOM元素或存储可变值
4.2 useEffect的使用场景
useEffect用于处理组件副作用,如数据获取、订阅或手动修改DOM,相当于类组件的生命周期方法。
useEffect(() => {
// 组件挂载或依赖变化时执行
document.title = `你有${count}条消息`;
// 清理函数,组件卸载或依赖变化前执行
return () => {
document.title = "React App";
};
}, [count]); // 仅在count变化时执行
项目中相关Hooks实现:hooks/useEventListener.ts
五、性能优化实践
5.1 为什么index作为key是不良实践?
在渲染列表时,使用index作为key可能导致以下问题:
- 当列表重新排序时,组件可能不会正确更新
- 可能导致不必要的重新渲染
- 可能引发状态管理问题
推荐使用唯一且稳定的标识符作为key:
// 不推荐
{items.map((item, index) => (
<Item key={index} {...item} />
))}
// 推荐
{items.map(item => (
<Item key={item.id} {...item} />
))}
5.2 useMemo与useCallback的应用
useMemo和useCallback是React提供的性能优化工具:
-
useMemo:缓存计算结果,避免不必要的重复计算 -
useCallback:缓存函数引用,避免子组件不必要的重新渲染
// 使用useMemo缓存计算结果
const total = useMemo(() => {
return items.reduce((sum, item) => sum + item.price, 0);
}, [items]);
// 使用useCallback缓存函数
const handleClick = useCallback(() => {
setCount(count + 1);
}, [count]);
六、常见面试题解析
6.1 虚拟DOM与真实DOM的区别?
虚拟DOM是内存中的JavaScript对象,用于描述真实DOM结构。React通过比较虚拟DOM的差异(Diffing算法),只更新需要变化的部分,提高渲染性能。
6.2 受控组件与非受控组件的区别?
-
受控组件:表单数据由React状态控制,通过
onChange更新 -
非受控组件:表单数据由DOM本身处理,通过
ref访问
// 受控组件
function ControlledInput() {
const [value, setValue] = useState('');
return (
<input
value={value}
onChange={e => setValue(e.target.value)}
/>
);
}
// 非受控组件
function UncontrolledInput() {
const inputRef = useRef(null);
return <input ref={inputRef} />;
}
七、实战项目结构解析
本项目采用现代化的React项目结构,主要包含以下部分:
- app/:应用主要组件和页面
- ***ponents/:可复用UI组件
- context/:上下文管理
- hooks/:自定义Hooks
- public/:静态资源和JSON格式的面试题数据
面试题数据文件示例:public/index.json,包含了各类React面试题的结构化数据。
八、总结与学习建议
掌握React不仅需要理解概念,更要通过实践加深理解。建议:
- 构建小型项目,如Todo应用、博客等
- 阅读React官方文档和源码
- 参与开源项目,学习最佳实践
- 定期复习本文提供的面试题,查漏补缺
通过系统学习和实践,你不仅能轻松应对React面试,更能构建高效、可维护的React应用。
项目完整代码:https://gitcode.***/gh_mirrors/pr/preguntas-entrevista-react
【免费下载链接】preguntas-entrevista-react Preguntas típicas sobre React para entrevistas de trabajo ⚛️ 项目地址: https://gitcode.***/gh_mirrors/pr/preguntas-entrevista-react