Услышал на одном из собеседований, как именно и где хранит состояния react
useState
const [count, setCount] = useState(0);
(+как оно влияет на рендер)
setCount
передать число 1, то это функция обновить count
и вызовит рендер Делаю запрос на сервер и он падает в ошибку и я хочу понять ,что там произошло, как получить статус кода?
const response = await fetch(`${this.webUrl}/checkConnection/`);
console.log(response.status, 'status') //Вот так получают статус
const getPosts = async () => {
try {
const res = await fetch('http://jsonplaceholder.typicode.com/posts')
const data = await res.json()
console.log(data, 'array')
} catch (error) {
console.log(error)
}
}
getPosts ()
await res.json()
const path = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
const { CleanWebpackPlugin } = require('clean-webpack-plugin')
module.exports = {
mode: 'production',
entry: ['@babel/polyfill', path.resolve(__dirname, 'src/index.tsx')],
output: {
filename: 'js/vm.js',
path: path.resolve(__dirname, 'dist')
},
devtool: process.env.NODE_ENV === 'development' ? 'source-map' : false,
devServer: {
port: 3000,
historyApiFallback: true,
open: true
},
target: 'web',
resolve: {
extensions: ['.tsx', '.ts', '.jsx', '.js']
},
performance: {
hints: false
},
plugins: [
new HtmlWebpackPlugin({
template: path.resolve(__dirname, 'public/index.html'),
filename: 'index.html'
}),
new MiniCssExtractPlugin({
filename: 'css/style.css'
}),
new CleanWebpackPlugin()
],
module: {
rules: [
{
test: /\.(tsx|ts)$/,
exclude: /node_modules/,
use: ['ts-loader']
},
{
test: /\.(jsx|js)$/,
exclude: /node_modules/,
use: ['babel-loader']
},
{
test: /\.(css|scss|sass)$/,
use: [MiniCssExtractPlugin.loader, 'css-loader', 'sass-loader']
},
{
test: /\.(pdf|png|jpeg|jpg|svg)$/,
use: [
{
loader: 'file-loader',
options: {
name: '/assets/[name].[ext]'
}
}
]
}
]
}
}
{
"compilerOptions": {
"target": "es6",
"lib": [
"dom",
"dom.iterable",
"esnext"
],
"allowJs": true,
"skipLibCheck": true,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"strict": true,
"forceConsistentCasingInFileNames": true,
"noFallthroughCasesInSwitch": true,
"module": "esnext",
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": false,
"noEmit": false,
"jsx": "react-jsx"
},
"include": [
"src"
]
}
{
"presets": ["@babel/preset-env", "@babel/preset-react", "@babel/preset-typescript"]
}
"devDependencies": {
"@babel/core": "^7.19.3",
"@babel/polyfill": "^7.12.1",
"@babel/preset-env": "^7.19.4",
"@babel/preset-react": "^7.18.6",
"@babel/preset-typescript": "^7.18.6",
"babel-loader": "^8.2.5",
"clean-webpack-plugin": "^4.0.0",
"css-loader": "^6.7.1",
"file-loader": "^6.2.0",
"html-webpack-plugin": "^5.5.0",
"mini-css-extract-plugin": "^2.6.1",
"ts-loader": "^9.4.1",
"typescript": "^4.8.4",
"webpack": "^5.74.0",
"webpack-cli": "^4.10.0",
"webpack-dev-server": "^4.11.1"
}
const isClassName = (type) => {
switch (type) {
case "file":
return "input-file";
case "radio":
return "input-radio";
case "password":
return "input-password";
case "checkbox":
return "input-checkbox";
default:
return 'input-default'
}
};
className = {`${classes ? classes : ''} ${isClassName(type)}`}
isClassName
напиши вне компонента
let [datasDays, setDatasDays] = useState([]) useEffect(()=>{ fetch(`https://api.openweathermap.org/data/2.5/onecall?lat=58.0105&lon=56.2502&units=metric&exclude=minutely,hourly&lang=RU&appid=7590b58fc327c0300af42791a4390329`) .then(response => response.json()) .then(data =>{ setDatasDays(data.daily) }, []) })
datasDays
ты должен перезаписать с помощью функции дать аргумент в эту функциюsetDatasDays
Разбираюсь в теме работы с токенами, не могуть понять, как должна работать авторизация по токенам. Если сервер нам присылает токены через Set-Cookie, мы не можем получить к ним доступ с помощью java script, но для дальнейших запросов нам нужно установить заголовок Authorization: `Bearer ${access_token}`
req.cookies
и при каждом запросе на сервер ты можешь сделать middleware проверка токена import {useState} from "react";
function App() {
const users = [
{id: 1, title: 'Dima'},
{id: 2, title: 'Oleg'},
]
const [user, setUser] = useState(users)
const addUser = () => {
const name = prompt()
setUser({...users, id: Date.now(), title: name})
}
const usersList = () => {
return user.map(user => <div>{user.title}</div>)
}
return (
<div className="App">
<button onClick={addUser}>Click me!</button>
<br/>
{usersList()}
</div>
);
}
export default App;
<button onClick={() => addUser(prompt())}>Click me!</button>
useEffect(() => {
document.body.onload = function () {
setTimeout(function () {
let preloader = document.getElementById('page-preloader');
if ( preloader.classList.contains('none') ) {
preloader.classList.add('none')
}
}, 1000)
}
}, [])
const input = document.querySelector('input')
let value = ''
input.addEventListener('change', () => {
value = input.value
})
getUsers() .then((users) => (this.users = users)) .then(() => getOrganizations()) .then((organizations) => (this.organizations = organizations)) .then(() => this.setState({ loading: false }));
if (this.state.loading) { return "Loading..."; } let users = []; for (let i = 0; i < this.users.length; i++) { const name = this.users[i].name; let org; for (let j = 0; j < this.organizations.length; j++) { if (this.organizations[j].id === this.users[i].organization) { org = this.organizations[j].name; } } users.push( <div className="user-list-item"> <div>name: {name}</div> <div onClick={() => this.selectOrg(org)}>org: {org}</div> </div> ); }
{this.state.selectedOrg && <button onClick={() => this.resetSelectedOrg()}>reset selected org</button>}
for (let j = 0; j < this.organizations.length; j++) { if (this.organizations[j].id === this.users[i].organization) { org = this.organizations[j].name; } }
for (let i of arr)
run
тогда просто скачай пакет менеджер yarn
. У yarn команды немного отличаются, но суть тоже самое и самое главное тебе не нужно постоянно писать run
, сам yarn сможет понять и запускать скрипты. Еще один плюс который я хочу отметить то что yarn намного быстрее чем npm