import React.Component from 'react'
import [ Component ] from 'react'
import Component from 'react'
import { Component } from 'react'
React.memo
.useReducer
.useMemo
.shouldComponentUpdate
.const person =(firstName, lastName) =>
{
first: firstName,
last: lastName
}
console.log(person("Jill", "Wilson"))
import React, {useState} from 'react';
const name = 'Rachel';
const age = 31;
const person = { name, age };
console.log(person);
{name: "Rachel", age: 31}
{person: "Rachel", person: 31}}
{person: {name: "Rachel", age: 31}}
const topics = ['cooking', 'art', 'history'];
const first = ["cooking", "art", "history"]
const [] = ["cooking", "art", "history"]
const [, first]["cooking", "art", "history"]
const [first] = ["cooking", "art", "history"]
const [, , animal] = ['Horse', 'Mouse', 'Cat'];
console.log(animal);
<Message {...props} />
<Route path="/:id" />
function Dish() {
return <h1>Mac and Cheese</h1>;
}
ReactDOM.render(<Dish />, document.getElementById('root'));
div
h1
React.createElement('h1', null, "What's happening?");
<h1 props={null}>What's happening?</h1>
<h1>What's happening?</h1>
<h1 id="component">What's happening?</h1>
<h1 id="element">What's happening?</h1>
function MyComponent() {
return (
<Suspense>
<div>
<Message />
</div>
</Suspense>
);
}
const message = 'Hi there';
const element = <p>{message}</p>;
React.memo
React.split
React.lazy
React.fallback
useLayoutEffect
?Джерело “useLayoutEffect — це версія useEffect, яка викликається перед тим, як браузер перемалює екран.”
[Довідка] Правильна відповідь на запитання “Коли використовувати useLayoutEffect?” така:
Коли потрібно змінити верстку екрана.
useLayoutEffect використовується, коли потрібно виконати зміни в DOM, що залежать від оновленого компонування елементів. Він дозволяє вносити зміни в DOM синхронно перед тим, як браузер виконає етап малювання. Це може бути корисно, коли потрібно виміряти або маніпулювати версткою, наприклад, отримати розміри або позиції елементів, розрахувати зсуви прокрутки або виконати інші операції, що потребують актуальної інформації про верстку.
Інший варіант відповіді є неточним:
“Коли потрібно, щоб браузер перемалював перед запуском ефекту” — це неправильно. Мета useLayoutEffect полягає в тому, щоб виконати ефект синхронно після оновлення DOM, але перед тим, як браузер перемалює, дозволяючи вносити зміни, пов’язані з версткою, до того, як відбудеться візуалізація.
Пояснення:
useLayoutEffect
виконується перед хуком useEffect
, не зважаючи на мутації DOM. Хоча хук React useLayoutEffect
встановлюється після хука useEffect
, він викликається першим!
A. <button onClick={this.handleClick}>Click Me</button>
B. <button onClick={event => this.handleClick(event)}>Click Me</button>
function Dish(props) {
return (
<h1>
{props.name} {props.cookingTime}
</h1>
);
}
function Dish([name, cookingTime]) { return <h1>{name} {cookingTime}</h1>; }
function Dish({name, cookingTime}) { return <h1>{name} {cookingTime}</h1>; }
function Dish(props) { return <h1>{name} {cookingTime}</h1>; }
function Dish(...props) { return <h1>{name} {cookingTime}</h1>; }
React.PureComponent
?shouldComponentUpdate()
getDerivedStateFromProps()
— це небезпечний метод для використанняconst Heading = () => {
<h1>Hello!</h1>;
};
h1
.h1
в інший компонент.h1
в div
.[e.target.id]
у цьому фрагменті коду?const handleChange = (e) => {
setState((prevState) => ({ ...prevState, [e.target.id]: e.target.value }));
};
class Clock extends React.Component {
render() {
return <h1>Look at the time: {time}</h1>;
}
}
Array.map()
?setState
, а не об’єкт?setState
є асинхронним і може призвести до несинхронних значень.Пояснення: Оскільки this.props
і this.state
можуть оновлюватися асинхронно, не слід покладатися на їхні значення для обчислення наступного стану.
React
ReactDOM
Render
DOM
value
.defaultValue
.default
.const clock = (props) => {
return <h1>Look at the time: {props.time}</h1>;
};
this
render
clock
з великої літериПояснення: У JSX теги з малої літери вважаються HTML-тегами.
useEffect(function updateTitle() { document.title = name + ' ' + lastname; });
useEffect(() => { title = name + ' ' + lastname; });
useEffect(function updateTitle() { name + ' ' + lastname; });
useEffect(function updateTitle() { title = name + ' ' + lastname; });
fallback
split
lazy
memo
function MyComponent(props) {
const [done, setDone] = useState(false);
return <h1>Done: {done}</h1>;
}
useEffect(() => { setDone(true); });
useEffect(() => { setDone(true); }, []);
useEffect(() => { setDone(true); }, [setDone]);
useEffect(() => { setDone(true); }, [done, setDone]);
<button onClick={this.handleClick()}>Click this</button>
<button onClick={this.handleClick.bind(handleClick)}>Click this</button>
<button onClick={handleClick()}>Click this</button>
<button onClick={this.handleClick}>Click this</button>
<button onclick={this.handleClick}>Click this</button>
fetch()
?fetch()
підтримується більшістю браузерів.useEffect(() => {
setName('John');
}, [name]);
this.setState(...)
this.forceUpdate()
class Button extends React.Component{
constructor(props) {
super(props);
// Відсутній рядок
}
handleClick() {...}
}
this.handleClick.bind(this);
props.bind(handleClick);
this.handleClick.bind();
this.handleClick = this.handleClick.bind(this);
<React.Fragment>
<h1>Our Staff</h1>
<p>Our staff is available 9-5 to answer your questions</p>
</React.Fragment>
<...>
<h1>Our Staff</h1>
<p>Our staff is available 9-5 to answer your questions</p>
</...>
<//>
<h1>Our Staff</h1>
<p>Our staff is available 9-5 to answer your questions</p>
<///>
<>
<h1>Our Staff</h1>
<p>Our staff is available 9-5 to answer your questions</p>
</>
<Frag>
<h1>Our Staff</h1>
<p>Our staff is available 9-5 to answer your questions</p>
</Frag>
count
у компоненті, що потрібно додати в фігурні дужки в h1
?class Ticker extends React.component {
constructor(props) {
super(props);
this.state = { count: 0 };
}
render() {
return <h1>{}</h1>;
}
}
greeting
?const greeting = isLoggedIn ? <Hello /> : null;
isLoggedIn
дорівнює trueorderNumber
?ReactDOM.render(<Message orderNumber="16" />, document.getElementById('root'));
h1
, але виникає помилка неочікуваного токена під час виконання. Як це виправити?const element = <h1 style={ backgroundColor: "blue" }>Hi</h1>;
const element = <h1 style="backgroundColor: "blue""}>Hi</h1>;
const element = <h1 style=>Hi</h1>;
const element = <h1 style={blue}>Hi</h1>;
const element = <h1 style="blue">Hi</h1>;
replaceState
refreshState
updateState
setState
const Star = ({ selected = false }) => <Icon color={selected ? 'red' : 'grey'} />;
this.handleClick
не прив’язано правильно)? A. <button onClick=this.handleClick>Click Me</button>
B. <button onClick={event => this.handleClick(event)}>Click Me</button>
Кнопка A не матиме доступу до об'єкта події при натисканні
Кнопка A не викличе обробник this.handleClick успішно
Немає різниці
Кнопка B не викличе обробник this.handleClick успішно
<Route path="/:id">
{' '}
<About />
</Route>
<Route path="/tid" about={Component} />
<Route path="/:id" route={About} />
<Route>
<About path="/:id" />
</Route>
const Greeting = ({ name }) => <h1>Hello {name}!</h1>;
class Greeting extends React.Component {
constructor() {
return <h1>Hello {this.props.name}!</h1>;
}
}
class Greeting extends React.Component {
<h1>Hello {this.props.name}!</h1>;
}
class Greeting extends React.Component {
render() {
return <h1>Hello {this.props.name}!</h1>;
}
}
class Greeting extends React.Component {
render({ name }) {
return <h1>Hello {name}!</h1>;
}
}
render
?ReactDOM.render(
<h1>Hi<h1>,
document.getElementById('root')
)
<a>
у React?Назад
у браузері.Link
це просто інша назва для тега <a>
.<a>
викличе помилку при використанні в React.<a>
викликає повне перезавантаження сторінки, тоді як компонент Link
цього не робить.x
, який передається у функцію createElement
?React.createElement(x, y, z);
useEffect(() => {
// щось робити
}, []);
class Comp extends React.Component {
render() {
return <h1>Look at the time: {time}</h1>;
}
}
ReactDOM.createPortal(x, y);
setCount
?const [count, setCount] = useState(0);
const database = [{ data: 1 }, { data: 2 }, { data: 3 }];
database.map((user) => <h1>{user.data}</h1>);
const { name: firstName } = props;
name
, що й об’єкт props
.firstName
об’єкта props
присвоюється константі з назвою name
.props.name.firstName
.name
об’єкта props
присвоюється константі з назвою firstName
.const MyComponent = ({ names }) => (
<h1>Hello</h1>
<p>Hello again</p>
);
ReactDOM.createPortal(x, y);
<div>
?const MyComponent = ({ children }) => (
<div>{children.length}</div>
);
...
<MyComponent>
<p>
Hello <span>World!</span>
</p>
<p>Goodbye</p>
</MyComponent>
const [count, setCount] = useState(0);
import React from 'react';
import { createRoot } from 'reactjs-dom';
const element = <h1>Hi</h1>;
// Примітка: Помилка в рядку нижче
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(element);
createRoot(document.getElementById("root"));
ReactDOM(element, document.getElementById("root"));
renderDOM(element, document.getElementById("root"));
DOM(element, document.getElementById("root"));
render() {
const isLoggedIn = this.state.isLoggedIn;
return (
<div>
Користувач:
</div>
);
}
Користувач увійшов у систему? увійшов : не увійшов.
Користувач {isLoggedIn = "ні"}.
Користувач {isLoggedIn ? "увійшов." : "не увійшов"}.
class StarTrekkin extends React.Component {
firePhotonTorpedoes(e) {
console.log('піу піу');
}
render() {
return; // Відсутній код
}
}
<button onClick={firePhotonTorpedoes()}>Піу Піу</button>
<button onClick={firePhotonTorpedoes}>Піу Піу</button>
<button onClick={this.firePhotonTorpedoes()}>Піу Піу</button>
<button onClick={this.firePhotonTorpedoes}>Піу Піу</button>
prop-helper
.prop-types
.checker-types
.let dish = <h1>Mac and Cheese</h1>;
let dish = <h1 id={heading}>Mac and Cheese</h1>;
let dish = <h1 id="heading">Mac and Cheese</h1>;
let dish = <h1 id:"heading">Mac and Cheese</h1>;
let dish = <h1 class="heading">Mac and Cheese</h1>;
class Huggable extends React.Component {
hug(id) {
console.log("hugging " + id);
}
render() {
let name = "kitten";
let button = // Відсутній код
return button;
}
}
<button onClick={(name) => this.hug(name)}>Hug Button</button>;
<button onClick={this.hug(e, name)}>Hug Button</button>;
<button onClick={(e) => hug(name, e)}>Hug Button</button>;
<button onClick={(e) => this.hug(name, e)}>Hug Button</button>;
Пояснення:
Це питання перевіряє знання класових компонентів React. Потрібно використовувати this
, щоб викликати методи, оголошені всередині класових компонентів.
Пояснення: Компоненти React схожі на функції, які повертають HTML-елементи. Компоненти є незалежними та багаторазовими частинами коду. Вони служать тій самій меті, що й функції JavaScript, але працюють ізольовано та повертають HTML. Компоненти бувають двох типів: класові та функціональні.
function Dish() {
return (
<>
<Ingredient />
<Ingredient />
</>
);
}
class TransIsBeautiful extends React.Component {
constructor(props){
// Відсутній рядок
console.log(this) ;
}
...
}
constructor(props) {
super(props);
this.state = {
pokeDex: []
};
}
function add(x = 1, y = 2) {
return x + y;
}
add();
Пояснення: функція, викликана без параметра, використовуватиме типове значення для параметрів, тому x завжди буде дорівнювати 1, а y завжди буде дорівнювати 2.
const { tree, lake } = nature;
sent
встановлена в булеве значення false?ReactDom.render(
<Message sent=false />,
document.getElementById("root")
);
<Message sent={false} />,
ReactDom.render(<Message sent="false" />, document.getElementById('root'));
<Message sent="false" />,
ReactDom.render(<Message sent="false" />, document.getElementById('root'));
const PokeDex = (props) => {
const [pokeDex, setPokeDex] = useState([]);
/// ...
};
Пояснення: useState завжди повертає масив із двома значеннями: сам стан (перше значення) і функцію set, яка дозволяє оновлювати стан (друге значення). Довідка по useState
const Greeting = ({ initName }) => {
const greet = (name) => console.log("Hello, " + name + "!");
return <button onClick={ ... }>Greeting Button </button>
}
Пояснення: Очевидно, що в питанні була помилка, де замість greet
було написано hug
. Відкинувши це, все одно можна винести уроки з цього питання.
this
. У вікні браузера глобальний об’єкт — це [об’єкт Window].
Це функціональний компонент, тому this
з this.hug
насправді відноситься до вікна браузера.
Оскільки це функціональний компонент, можна безпосередньо звертатися до hug без використання this
.initName
доступний у функціональній області Greeting, тому його можна безпосередньо передати як аргумент до hug().React Hooks useCallback документація
useRef
?class Greeting extends React.Component {
render() {
return <h1>Hello {this.props.name}!<h1>;
}
}
const Greeting = (name) => <h1>{name}</h1>
function Greeting(name){return <h1>{name}</h1>;}
const Greeting = props => { <h1>{props.name}</h1> }
const Greeting = ({ name }) => <h1>Hello {name}</h1>;
const Waitlist = () => {
const [name, setName] = useState('');
const [waitlist, setWaitlist] = useState([]);
const onSubmit = (e) => {
e.preventDefault();
waitlist.push(name);
};
return (
<div>
<form onSubmit={onSubmit}>
<label>
Name: <input type="text" value={name} onChange={(e) => setName(e.target.value)} />
</label>
<button type="submit">Add to waitlist</button>
</form>
<ol>
{waitlist.map((name) => (
<li key={name}>{name}</li>
))}
</ol>
</div>
);
};
waitlist
змінюється безпосередньо. Використовуйте функцію setWaitlist
, щоб оновити стан списку очікування.waitlist
є повторювані імена.import React from 'react';
const [poked, setPoked] = React.useState(false);
function PokeButton() {
return <button onClick={() => setPoked(true)}>{poked ? 'You have left a poke.' : 'Poke'}</button>;
}
function PokeButton() {
const { poked, setPoked } = useState(false);
return <button onclick={() => setPoked(true)}>{poked ? 'You have left a poke.' : 'Poke'}</button>;
}
const OtherComponent = React.lazy(() => import('./OtherComponent.js'));
function MyComponent() {
return (
<XXXX fallback={<spinner />}>
<OtherComponent />
</XXXX>
);
}
useEffect(callNetworkFunc, XXXX);
<div>{isLoggedIn ? <Hello /> : null}</div>
useLayoutEffect
?fetch()
?fetch()
підтримується більшістю браузерів.key
під час рендерингу списку компонентів?key
використовується для надання унікального ідентифікатора компоненту.key
використовується для визначення кольору компонента.key
обов’язковий для рендерингу списку компонентів.key
використовується React для оптимізації оновлень і визначення, які елементи змінилися або були додані/видалені у списку.