Цена за 48 часов в ленте | 13200,00 |
Цена за 1 час закрепления | N/A |
Взаимопиар | Нет |
Дополнительные условия рекламы | Отсутствуют |
map()
, который позволяет перебрать массив и вернуть JSX для каждого элемента. Это удобный и декларативный способ создания списков элементов.import React from 'react';
const users = [
{ id: 1, name: 'Alice', age: 25 },
{ id: 2, name: 'Bob', age: 30 },
{ id: 3, name: 'Charlie', age: 35 }
];
const UserList = () => {
return (
User List
{users.map(user => (
{user.name} - {user.age} years old
))}
);
};
export default UserList;
map()
{users.map(user => (
key
map()
.import React from 'react';
const users = [
{ id: 1, name: 'Alice', age: 25, email: 'alice@example.com' },
{ id: 2, name: 'Bob', age: 30, email: 'bob@example.com' },
{ id: 3, name: 'Charlie', age: 35, email: 'charlie@example.com' }
];
const UserItem = ({ user }) => {
return (
{user.name}
Age: {user.age}
Email: {user.email}
);
};
const UserList = () => {
return (
User List
{users.map(user => (
))}
);
};
export default UserList;
const UserItem = ({ user }) => {
return (
{user.name}
Age: {user.age}
Email: {user.email}
);
};
map()
{users.map(user => (
))}
setState()
может быть асинхронным. Это означает, что состояние компонента не обязательно будет обновлено сразу после вызова setState()
. Вместо этого, React может сгруппировать несколько вызовов setState()
для оптимизации производительности.setState()
React сливает (мерджит) новый объект состояния с текущим состоянием. Это позволяет обновлять только те части состояния, которые изменились, без перезаписи всего состояния.class MyComponent extends React.Component {
constructor(props) {
super(props);
this.state = {
count: 0
};
}
incrementCount = () => {
this.setState({ count: this.state.count + 1 });
}
render() {
return (
Count: {this.state.count}
);
}
}
class MyComponent extends React.Component {
constructor(props) {
super(props);
this.state = {
count: 0
};
}
incrementCount = () => {
this.setState((prevState, props) => ({
count: prevState.count + 1
}));
}
render() {
return (
Count: {this.state.count}
);
}
}
setState()
— это колбэк, который вызывается после того, как состояние было обновлено и компонент перерисован.class MyComponent extends React.Component {
constructor(props) {
super(props);
this.state = {
count: 0
};
}
incrementCount = () => {
this.setState({ count: this.state.count + 1 }, () => {
console.log('Состояние обновлено:', this.state.count);
});
}
render() {
return (
Count: {this.state.count}
);
}
}
this.state.count = 1
) не вызовет перерисовку компонента. Всегда используйте setState()
.setState()
для повышения производительности. Поэтому состояние может быть обновлено асинхронно.useState
. setState()
используется только в компонентах-классах.const person = {
name: 'Alice',
age: 25
};
console.log(person.name); // 'Alice'
console.log(person.age); // 25
const person = {
'first name': 'Alice',
age: 25
};
console.log(person['first name']); // 'Alice'
console.log(person['age']); // 25
const propertyName = 'age';
console.log(person[propertyName]); // 25
const person = {
name: 'Alice',
age: 25
};
const { name, age } = person;
console.log(name); // 'Alice'
console.log(age); // 25
const person = {
name: 'Alice',
age: 25
};
const keys = Object.keys(person);
console.log(keys); // ['name', 'age']
const person = {
name: 'Alice',
age: 25
};
const values = Object.values(person);
console.log(values); // ['Alice', 25]
const person = {
name: 'Alice',
age: 25
};
const entries = Object.entries(person);
console.log(entries); // [['name', 'Alice'], ['age', 25]]
in
или метода hasOwnProperty
.in
const person = {
name: 'Alice',
age: 25
};
console.log('name' in person); // true
console.log('gender' in person); // false
hasOwnProperty
const person = {
name: 'Alice',
age: 25
};
console.log(person.hasOwnProperty('name')); // true
console.log(person.hasOwnProperty('gender')); // false
try...catch
позволяет обрабатывать ошибки, возникающие в блоке try
. Если возникает ошибка, выполнение кода переходит к блоку catch
.try {
// Код, который может вызвать ошибку
let result = riskyOperation();
console.log(result);
} catch (error) {
// Обработка ошибки
console.error('Произошла ошибка:', error.message);
}
function riskyOperation() {
throw new Error('Что-то пошло не так');
}
try {
riskyOperation();
} catch (error) {
console.error('Произошла ошибка:', error.message); // Произошла ошибка: Что-то пошло не так
}
finally
выполняется после того, как были выполнены блоки try
и catch
. Он выполняется независимо от того, произошла ли ошибка.try {
let result = riskyOperation();
console.log(result);
} catch (error) {
console.error('Произошла ошибка:', error.message);
} finally {
console.log('Этот блок выполнится в любом случае');
}
async
/await
, также можно использовать try...catch
.async function fetchData() {
try {
let response = await fetch('https://api.example.com/data');
if (!response.ok) {
throw new Error('Network response was not ok');
}
let data = await response.json();
console.log(data);
} catch (error) {
console.error('Произошла ошибка при получении данных:', error.message);
}
}
fetchData();
catch
и finally
для обработки ошибок.fetch('https://api.example.com/data')
.then(response => {
if (!response.ok) {
throw new Error('Network response was not ok');
}
return response.json();
})
.then(data => {
console.log(data);
})
.catch(error => {
console.error('Произошла ошибка при получении данных:', error.message);
})
.finally(() => {
console.log('Запрос завершен');
});
window.onerror
и window.onunhandledrejection
. Обработка ошибок выполненияwindow.onerror = function(message, source, lineno, colno, error) {
console.error('Произошла глобальная ошибка:', message);
return true; // предотвращает вывод ошибки в консоль браузера
};
window.onunhandledrejection = function(event) {
console.error('Неотловленный отказ в промисе:', event.reason);
};
Error
.class CustomError extends Error {
constructor(message) {
super(message);
this.name = 'CustomError';
}
}
try {
throw new CustomError('Это пользовательская ошибка');
} catch (error) {
console.error(error.name + ': ' + error.message); // CustomError: Это пользовательская ошибка
}
Date
) или циклических ссылок.const original = {
name: 'Alice',
age: 25,
address: {
city: 'Wonderland',
zip: '12345'
}
};
const copy = JSON.parse(JSON.stringify(original));
copy.address.city = 'Otherland';
console.log(original.address.city); // Wonderland
console.log(copy.address.city); // Otherland
function deepClone(obj) {
if (obj === null || typeof obj !== 'object') {
return obj;
}
if (Array.isArray(obj)) {
const arrCopy = [];
obj.forEach((item, index) => {
arrCopy[index] = deepClone(item);
});
return arrCopy;
}
const objCopy = {};
for (const key in obj) {
if (obj.hasOwnProperty(key)) {
objCopy[key] = deepClone(obj[key]);
}
}
return objCopy;
}
const original = {
name: 'Alice',
age: 25,
address: {
city: 'Wonderland',
zip: '12345'
}
};
const copy = deepClone(original);
copy.address.city = 'Otherland';
console.log(original.address.city); // Wonderland
console.log(copy.address.city); // Otherland
cloneDeep
для глубокого копирования объектов.const _ = require('lodash');
const original = {
name: 'Alice',
age: 25,
address: {
city: 'Wonderland',
zip: '12345'
}
};
const copy = _.cloneDeep(original);
copy.address.city = 'Otherland';
console.log(original.address.city); // Wonderland
console.log(copy.address.city); // Otherland
structuredClone
позволяет создавать глубокие копии объектов. Этот метод является частью HTML Living Standard и поддерживается в некоторых современных браузерах и средах исполнения.const original = {
name: 'Alice',
age: 25,
address: {
city: 'Wonderland',
zip: '12345'
}
};
const copy = structuredClone(original);
copy.address.city = 'Otherland';
console.log(original.address.city); // Wonderland
console.log(copy.address.city); // Otherland