Работает ли сейчас meta keywords?- работает, но можно не заполнять ключевыми словами, пусть это сделает робот за тебя, но сам тег должен присутствовать на странице
setInterval(() => nextButton?.click(), 5000)
поместить внутрь второго if, то всё сработает, но лучше бы - логику по интервалу вынести в useEffect, а в handlePlay - менять только флаг стейта width: 400px;
height: 400px;
border-radius: 50%;
background: conic-gradient( from -90deg, rgba(236, 55, 0, 1) 0 12.5%,rgba(245, 245, 245, 1) 0 25%,rgba(236, 55, 0, 1) 0 37.5%,rgba(245, 245, 245, 1) 0 50%,rgba(236, 55, 0, 1) 0 62.5%,rgba(245, 245, 245, 1) 0 75%,rgba(236, 55, 0, 1) 0 87.5%,rgba(245, 245, 245, 1) 0 100% );
const onOpen = () => {
// проверяем есть ли скролл у html
if(document.documentElement.scrollHeight !== document.documentElement.clientHeight){
document.documentElement.style = 'overflow: hidden;'
document.body.style = 'overflow-y: scroll;'
} else {
document.documentElement.style = 'overflow: hidden;'
}
}
const onClose = () => {
document.documentElement.removeAttribute('style');
document.body.removeAttribute('style')
}
import React, { useState } from 'react';
import { Navigate } from "react-router-dom";
import axios from 'axios';
import './login.css';
function Login() {
const [login, setLogin] = useState('');
const [password, setPassword] = useState('');
const [loginClass, setLoginClass] = useState('');
const [passwordClass, setPasswordClass] = useState('');
const [isLoggedIn, setIsLoggedIn] = useState(false);
const submit = async (evt) => {
evt.preventDefault(); // Предотвращаем отправку формы
console.log(login, password);
if (login.length === 0 || password.length === 0) {
console.log('stop')
if (!login) { // Проверяем, не пустое ли поле login
setLoginClass('is-invalid'); // Устанавливаем состояние, что поле заполнено некорректно
}
if (!password) { // Проверяем, не пустое ли поле password
setPasswordClass('is-invalid'); // Устанавливаем состояние, что поле заполнено некорректно
}
} else {
console.log('req')
await axios
.post('http://localhost:5000/test/auth/login', {
login: login,
password: password
})
.then((response) => {
console.log(response);
const { data } = response;
if (data.status == 200) {
console.log('entered successfully');
// Здесь изменяется состояние
setIsLoggedIn(true);
} else {
console.log('could not enter');
}
})
.catch((error) => {
console.log(error);
});
setPassword('');
setLogin('');
setLoginClass('');
setPasswordClass('');
}
};
if (isLoggedIn) {
return <Navigate to="/main" replace={true}/>
}
return (
<div className="container col-xl-10 col-xxl-8 px-4 py-5">
<div className="row align-items-center g-lg-5 py-5">
<div className="col-lg-7 text-center text-lg-start ">
<h1 className="display-4 fw-bold lh-1 text-body-emphasis mb-3">Library21</h1>
<p className="col-lg-10 fs-4">
Библиотека21 - Lorem ipsum dolor sit, amet consectetur adipisicing elit. Ex dolorem iusto animi vitae suscipit deleniti!
</p>
</div>
<div className="col-md-10 mx-auto col-lg-5">
<form className="p-4 p-md-5 border rounded-3 bg-body-tertiary">
<h2 className="mb-4">Вход</h2>
<div className="form-floating mb-3">
<input
type="text"
className={`form-control ${loginClass}`}
id="login"
placeholder="Введите логин"
value={login}
onChange={(evt) => { setLogin(evt.target.value) }}
/>
<label htmlFor="login">Логин</label>
</div>
<div className="form-floating mb-3">
<input
type="password"
className={`form-control ${passwordClass}`}
id="password"
placeholder="Введите пароль"
value={password}
onChange={(evt) => { setPassword(evt.target.value) }}
/>
<label htmlFor="password">Пароль</label>
</div>
<button className="w-100 btn btn-lg btn-primary" onClick={submit}>Войти</button>
</form>
</div>
</div>
</div>
);
}
export default Login;
<div class="container">
<div class="div2">
<code><a></a></code>
<p>ссылка</p>
</div>
</div>
.container{
margin: 50px auto;
display: flex;
justify-content: center;
width: 500px;
}
.div2{
background-color: #c8a185;
color: #30464f;
flex-shrink: 0;
width: 110%;
}
stroke-dashoffset: 0;
.c-dashed-line__path {
animation: c-dashed-line-path 3s ease-in-out ;
fill: none;
stroke: #fff;
stroke-dasharray: 241; /* this is the entire length of the line */
stroke-dashoffset: 0; /* this is the entire length of the line */
stroke-width: 2;
}
@keyframes c-dashed-line-path {
0% {
stroke-dashoffset:241;
}
100% {
stroke-dashoffset:0;
}
}
происходит перерендер Wrapper, рендерится второй Inner. После этого запускается onUnmount первого Inner, в консоли вижу null,- происходит перерендер Wrapper, рендерится второй Inner, в который попадает функция update в котором state равен null, после запускается onUnmount первого Inner и т.д
const recursy = (item) => {
if(item.children){
return <Route path={item.path} element={item.element}>{item.children.map(recursy)}</Route>;
}
return <Route path={item.path} element={item.element} />;
};
array.map(recursy)
operatorRandom
operatorRandom
вернет минус, а во втором плюс, тогда выходит что не одно из условий не отрабатывает, и в operation
остаётся пустая строка, и дальнейшая ошибка из-за неё<div>
<header>
лого
nav
див
</header>
<main>
<section></section>
</main>
</div>