# React 面试题
1. 如果只想要载入`Component`组件,下列语法正确的是?
A. `import React.Component from 'react'`
B. `import [ Component ] from 'react'`
C. `import Component from 'react'`
D. `import { Component } from 'react'`
2. 如果一个函数组件在给定相同的props下反复渲染,一个简单的性能优化方法是?
A. 使用 `React.memo` HOC
B. 使用 `useReducer` 钩子函数
C. 使用 `useMemo` 钩子函数
D. 实现 `shouldComponentUpdate` 生命周期函数
3. 如何修复下列语法错误?
```jsx=
const person =(firstName, lastName) =>
{
first: firstName,
last: lastName
}
console.log(person("Jill", "Wilson"))
```
A. 给Object包裹括号
B. 在另一个文件调用这个函数
C. 在第一个花括号处添加 return 声明
D. 使用Array代替Object
4. 如果你看到如下导入,这个组件使用了什么状态管理?
```jsx=
import React, {useState} from 'react';
```
A. React hook (钩子函数)
B. stateful components (状态组件)
C. math
D. class components (类组件)
5. 下列打印的结果是?
```jsx=
const name = 'Rachel';
const age = 31;
const person = { name, age };
console.log(person);
```
A. `{{name: "Rachel", age: 31}}`
B. `{name: "Rachel", age: 31}`
C. `{person: "Rachel", person: 31}}`
D. `{person: {name: "Rachel", age: 31}}`
6. 如何将参数传递过组件树而不需要手动传递props给每一层?
A. React Send
B. React Pinpoint
C. React Router
D. React Context
7. 什么工具将`JSX`转为`createELement`调用?
A. JSX Editor
B. ReactDOM
C. Browser Buddy
D. Babel
8. 考虑React Route中,下列代码中`:id`代表什么?
```jsx=
<Route path="/:id" />
```
A. route modal
B. route parameter
C. route splitter
D. route link
9. 如下代码会是由什么JSX代码转义来的?
```jsx=
React.createElement('h1', null, "What's happening?");
```
A. `<h1 props={null}>What's happening?</h1>`
B. `<h1>What's happening?</h1>`
C. `<h1 id="component">What's happening?</h1>`
D. `<h1 id="element">What's happening?</h1>`
10. Suspense 组件需要添加什么参数,以便去展示loading状态或spin?
```jsx=
function MyComponent() {
return (
<Suspense>
<div>
<Message />
</div>
</Suspense>
);
}
```
A. lazy
B. loading
C. fallback
D. spinner
11. 下列哪项属性你会用来在DOM中替代innerHTML?
A. injectHTML
B. dangerouslySetInnerHTML
C. weirdSetInnerHTML
D. strangeHTML
12. 当你使用webpack时,为什么需要用到loader?
A. 将物理文件放在一起
B. 预处理文件
C. 加载额外数据
D. 将网站加载入浏览器
13. 下列代码不渲染,该如何修复?
```jsx=
const Heading = () => (
<h1>Hello!</h1>;
);
```
A. 增加render function
B. 将圆括号改为花括号,并在h1标签前增加return
C. 将h1标签移到其他组件
D. 将h1标签包裹在一个div标签内
14. 你将一个用于捕获组件树下Javascript错误的React组件称作什么?
A. error bosses
B. error catchers
C. error helpers
D. error boundaries
15. 下列组件, 从初始化到点击一次按钮后,一共渲染了多少次?浏览器显示的value的值为?实际myRef.current的值为?
```jsx=
export default function App() {
const myRef = useRef(0);
useEffect(() => {
myRef.current += 1;
}, []);
const onClick = () => {
myRef.current += 1;
};
return (
<div>
<button onClick={onClick}>add one</button>
<div>value: {myRef.current}</div>
</div>
);
}
```
A. 渲染2次,value为1,myRef.current为2
B. 渲染1次,value为1,myRef.current为1
C. 渲染3次,value为2,myRef.current为2
D. 渲染1次,value为0,myRef.current为2
E. 渲染2次,value为1,myRef.current为1
F. 渲染3次,value为0,myRef.current为0