Есть потребность сделать часть функционала сайта на react, реализуется такое вообще или нет?)
Пока нашел только react quill и tiny mce.
Как можно реализовать такой функционал?
Какие есть библиотеки, что бы этот редактор был прямо на сайте?
Как настроить шторм, чтобы в проекте был и реакт и пхп?
<Route exact path='/contacts' Component={Contacts} />
// Component={Contacts} ???
import React from 'react';
import {BrowserRouter as Router, Routes, Route, Link} from 'react-router-dom';
import './App.scss';
import Header from './components/Header';
import Service from './pages/Service';
import Contacts from './pages/Contacts';
import Login from './pages/Login';
import Home from './pages/Home';
function App() {
return (
<Router>
<div className="App">
<Header />
<nav>
<Link to="/">Главная</Link>
<Link to="/service">Услуги</Link>
<Link to="/contacts">Контакты</Link>
<Link to="/login">Вход</Link>
</nav>
<Routes>
<Route path="/" element={<Home />} />
<Route path="/service" element={<Service />} />
<Route path="/contacts" element={<Contacts />} />
<Route path="/login" element={<Login />} />
<Route path="*" element={<NotFoundRoute/>} />
</Routes>
</div>
</Router>
);
}
// not fount route handler
function NotFoundRoute() {
return <div>Page not found</div>;
}
export default App;
import {Link} from "react-router-dom";
function Header(props) {
return (
<>
<header>
// ...
<Link to="/service">Услуги</Link>
<Link to="/contacts">Контакты</Link>
// ...
</header>
</>
)
}
export default Header;
как именно и где хранит состояния react
const [count, setCount] = useState(0);
Почему dispatch нельзя использовать в потоке кода при отрисовке компонента?
import {BrowserRouter as Router, Routes, Route, Navigate} from 'react-router-dom';
function App() {
const {getUser, user, setUser} = useUser();
return (
<Router>
<Routes>
<Route path="/" element={<LoginForm user={user} getUser={getUser}/>}/>
<Route path="login" element={<LoginForm user={user} getUser={getUser}/>}/>
<Route path="dashboard/*" element={<PrivateRoute user={user}><DashboardRoutes user={user}/></PrivateRoute>}/>
</Routes>
</Router>
);
}
export default App;
const DashboardRoutes = ({user}) => (
<Routes>
<Route path="/" element={<Dashboard user={user}/>}/>
<Route path="acts" element={<ActsPage user={user}/>}/>
</Routes>
);
const PrivateRoute = ({user, children}) => {
if(localStorage.getItem('token')) {
return children;
}
return <Navigate to="/login"/>;
}
DashboardRoutes()
можно добавлять вложенные роуты. if (__DEV__) {
console.warn('Some warning message');
}
import React, {useState, useEffect} from 'react';
function SuperComponent() {
// хранилище для пунктов
const [checkedLanguages, setCheckedLanguages] = useState([]);
const [displayData, setDisplayData] = useState([]);
const languagesData = [
{ id: "1", name: "Javascript" },
{ id: "2", name: "Python" },
{ id: "3", name: "Java" },
{ id: "4", name: "Kotlin" },
{ id: "5", name: "Dart" },
{ id: "6", name: "C#" }
];
// фильтруем пункты
useEffect(() => {
if (checkedLanguages.length > 0) {
const newData = languagesData.filter(language => checkedLanguages.includes(language.name));
setDisplayData(newData);
} else {
setDisplayData(languagesData);
}
}, [checkedLanguages]);
function handleCheckboxChange(event) {
const languageName = event.target.value;
if (event.target.checked) {
setCheckedLanguages([...checkedLanguages, languageName]);
} else {
const newCheckedLanguages = checkedLanguages.filter(language => language !== languageName);
setCheckedLanguages(newCheckedLanguages);
}
}
return (
<div>
{checkedLanguages.map(language => (
<div key={language} className="selected-language">
<p>{language}</p>
</div>
))}
{languagesData.map(language => (
<div key={language.id} className="checkbox-wrapper">
<input
type="checkbox"
value={language.name}
onChange={handleCheckboxChange}
/>
<label>{language.name}</label>
</div>
))}
// отображаем отфильтрованные пункты
<div className="languages-list">
{displayData.map(language => (
<div key={language.id}>
{language.name}
</div>
))}
</div>
</div>
);
}
export default SuperComponent;
Each child in a list should have a unique "key" prop
// ..
{items.map((i) => (
<React.Fragment key={i.id}>
<Item {...i}/>
</React.Fragment>
))}
// ..
// ..
{items.map((i) => (
<Item key={i.id} {...i}/>
))}
// ..
export const routes = [
{ path: '/', element: <MainPage /> },
{
path: '/posts',
element: <Posts />,
children: [
{ path: ':postId', element: <PostIdPage /> }
]
},
{ path: '/about', element: <About /> },
{ path: '/*', element: <Error /> },
]
const renderRoutes = (routes) => {
return (
<Routes>
{routes.map((route, index) => (
<Route key={index} path={route.path} element={route.element}>
{route.children && renderRoutes(route.children)}
</Route>
))}
</Routes>
);
};
export default function App() {
return (
<div>
{renderRoutes(routes)}
</div>
);
}