文章图片
1、你从“React中一切皆组件“了解到什么?组件是React应用程序UI的构建块。
这些组件将整个UI分割成独立的、可重用的小块。
然后,它呈现每个独立的组件,而不影响UI的其余部分。
2、解释React中的render()的用途。每个React组件必须强制拥有一个render()。它返回一个单一的React元素,该元素表示本机DOM组件。如果需要呈现多个HTML元素,则必须将它们分组在一个封闭标记内,如< form> 、< group> 、< div> 等。
这个函数必须保持纯,也就是说,它必须在每次调用时返回相同的结果。
3、如何将两个或多个组件嵌入到一个组件中?我们可以通过以下方式将组件嵌入其中:
class MyComponent extends React.Component{
render(){
return(<
div><
h1>Hello<
/h1>
<
Header/>
<
/div>
);
}
}
class Header extends React.Component{
render(){
return
<
h1>Header Component<
/h1>};
}
ReactDOM.render(
<
MyComponent/>, document.getElementById('content')
);
4、什么是Props?Props是React中的属性的简写。
它们是只读组件,必须保持纯粹,即不可变。
它们总是在整个应用程序中从父组件传递到子组件。
子组件永远不能将一个道具发送回父组件。
这有助于维护单向数据流,通常用于呈现动态生成的数据。
5、什么是React中的状态,它是如何使用的?状态是React组件的核心。
状态是数据的来源,必须尽可能保持简单。
基本上,状态是决定组件呈现和行为的对象。
与道具不同,它们是可变的,可以创建动态的和交互式的组件。
它们通过this.state()访问。
6、区分状态state和props
条件 | State | Props |
从父组件接收初始值 | Yes | Yes |
父组件可以更改值 | No | Yes |
设置组件内部的默认值 | Yes | Yes |
组件内部更改 | Yes | No |
设置子组件的初始值 | Yes | Yes |
子组件内部的更改 | Yes | No |
class MyComponent extends React.Component {
constructor() {
super();
this.state = {
name: 'Maxx',
id: '101'
}
}
render()
{
setTimeout(()=>{this.setState({name:'Jaeha', id:'222'})},2000)
return (
<
div><
h1>Hello {this.state.name}<
/h1><
h2>Your Id is {this.state.id}<
/h2>
<
/div>
);
}
}
ReactDOM.render(
<
MyComponent/>, document.getElementById('content')
);
8、React中的箭头函数是什么?它是如何使用的?
箭头函数是编写函数表达式的简短语法。
这些函数允许正确地绑定组件的上下文,因为在ES6中自动绑定在缺省情况下不可用。当处理高阶函数时,箭头函数是最有用的。
//General way
render() {
return(
<
MyInput onChange={this.handleChange.bind(this) } />
);
}
//With Arrow Function
render() {
return(
<
MyInput onChange={ (e) => this.handleOnChange(e) } />
);
}
9、区分有状态和无状态组件
有状态组件 | 无状态组件 |
在内存中存储组件的状态信息 | 计算组件内部的状态 |
有权更改组件状态 | 无权更改组件状态 |
包含过去、当前以及可能更改信息 | 包括过去、当前以及可能更改的信息 |
无状态组件通知他们关于状态更改的需求,然后将props发给他们 | 从有状态组件接收props,并作为回调函数 |
初始呈现阶段:这是组件即将开始其生命旅程并到达DOM的阶段。
更新阶段:一旦将组件添加到DOM中,它可能只在发生道具或状态更改时才更新和重新呈现。
这只发生在这个阶段。
卸载阶段:这是组件生命周期的最后一个阶段,在这个阶段组件被销毁并从DOM中删除。
11、详细解释React组件的生命周期方法。一些最重要的生命周期方法是:
componentWillMount()——在呈现之前在客户端和服务器端执行。
componentDidMount()——仅在第一次呈现之后在客户端执行。
componentWillReceiveProps()——在从父类接收到道具并调用另一个呈现之前调用。
shouldComponentUpdate()——根据某些条件返回真值或假值。
如果希望组件更新,则返回true,否则返回false。
默认情况下,它返回false。
componentWillUpdate()——在DOM中进行呈现之前调用。
componentDidUpdate()——在呈现发生后立即调用。
componentWillUnmount()——在从DOM卸载组件后调用。
它用于清除内存空间。
12、什么是React中的事件?在React中,事件是对鼠标悬停、鼠标点击、按键等特定操作的触发反应。
处理这些事件类似于处理DOM元素中的事件。
但是有一些语法上的差异,比如:
事件的命名使用大小写而不是小写。
事件作为函数而不是字符串传递。
event参数包含一组特定于事件的属性。
每个事件类型都包含其自己的属性和行为,只能通过其事件处理程序访问这些属性和行为。
13、如何在React中创建事件?
class Display extends React.Component({
show(evt) {
// code
},
render() {
// Render the div with an onClick prop (value is a function)
return (<
div onClick={this.show}>Click Me!<
/div>
);
}
});
14、什么是React中的合成事件?合成事件是充当浏览器原生事件的跨浏览器包装器的对象。
它们将不同浏览器的行为合并到一个API中。
这样做是为了确保事件在不同的浏览器之间显示一致的属性。
15、你对React中的refs有什么理解?refs是React中References的简写。
它是一个属性,有助于存储对特定React元素或组件的引用,这些引用将由组件呈现配置函数返回。
它用于返回对render()返回的特定元素或组件的引用。
当我们需要DOM度量或向组件添加方法时,它们就派上用场了。
class ReferenceDemo extends React.Component{
display() {
const name = this.inputDemo.value;
document.getElementById('disp').innerHTML = name;
}
render() {
return(<
div>
Name: <
input type="text" ref={input => this.inputDemo = input} />
<
button name="Click" onClick={this.display}>Click<
/button><
h2>Hello <
span id="disp"><
/span> !!!<
/h2><
/div>
);
}
}
16、列出一些你应该使用ref的情况。以下是应使用ref的情况:
需要管理焦点时,请选择文本或媒体播放
触发命令动画
与第三方DOM库集成
17、如何在React中模块化代码?我们可以通过使用导出和导入属性来模块化代码。
它们有助于在不同的文件中分别编写组件。
//ChildComponent.jsx
export default class ChildComponent extends React.Component {
render() {
return(
<
div><
h1>This is a child component<
/h1>
<
/div>
);
}
}
//ParentComponent.jsx
import ChildComponent from './childcomponent.js';
class ParentComponent extends React.Component {
render() {
return(<
div>
<
App />
<
/div>);
}
}
18、如何在React中创建表单?React表单类似于HTML表单。
但是在React中,状态包含在组件的状态属性中,仅通过setState()更新。
因此,元素不能直接更新它们的状态,它们的提交由JavaScript函数处理。
这个函数可以完全访问用户在表单中输入的数据。
handleSubmit(event) {
alert('A name was submitted: ' + this.state.value);
event.preventDefault();
}
render() {
return (<
form onSubmit={this.handleSubmit}>
<
label>
Name:
<
input type="text" value=http://www.srcmini.com/{this.state.value} onChange={this.handleSubmit} />
<
/label>
<
input type="submit" value="http://www.srcmini.com/Submit" />
<
/form>
);
}
19、如何理解受控和非受控组件?有什么区别?
受控组件 | 非受控组件 |
不维护自己的状态 | 维护自己的状态 |
数据由父组件控制 | 数据由DOM控制 |
通过props获取当前值,通过callbacks回调 | 使用ref通知更改当前值 |
HOC是将另一个组件封装在其中的自定义组件。它们可以接受任何动态提供的子组件,但不会修改或复制输入组件中的任何行为。
你可以说HOC是“纯粹的”组件。
21、你能用HOC做什么?HOC可用于许多任务,如:
代码重用、逻辑和引导抽象
呈现高顶
状态抽象和操作
props操作
22、什么是纯组分?纯组件是可以编写的最简单和最快的组件。
它们可以替换任何只有render()的组件。
这些组件增强了代码的简单性和应用程序的性能。
23、键在React中的意义是什么?键用于标识惟一的虚拟DOM元素,它们的相应数据驱动UI。
它们通过回收DOM中所有现有元素来帮助优化呈现。
【最新前端面试题!20个React面试题(React组件面试题及答案合集)】这些键必须是唯一的数字或字符串,使用它们只会重新排序元素,而不是重新呈现它们,这将提高应用程序的性能。
推荐阅读
- 前端入职必备!十大经典Vue面试题及答案
- 助你面试顺利!10个最新react面试题和答案详解
- 计算机组织|不同的指令周期
- MPI–简化分布式计算
- Python MongoDB – insert_one查询用法介绍
- JavaScript break和continue用法详细介绍
- 如何检测Angular中@Input()值何时更改()
- 算法设计(打印对称双三角图案)
- jQuery :first-child第一个元素选择器用法