#javascript #reactjs
Вопрос:
У меня есть такой компонент маршрутизатора:
import addProduct from "../components/Products"
[...]
<BrowserRouter>
<div className="content">
<Switch>
<Route path="/products">
<Products />
</Route>
<Route path="/add">
<AddProduct onSubmit={addProduct} />
<Products />
</Route>
</Switch>
</div>
</BrowserRouter>
Продукты, которые выглядят так (я вставляю только самые важные вещи):
const addProduct = async (newProduct) => {
const response = await axios.post('https://fakestoreapi.com/products', newProduct);
console.log(response)
setProducts([...products,response.data])
}
[...]
inside return I have a link to form, where we can create a new product:
<NavLink to="/add">
<h2>Click me to add a new product</h2>
</NavLink>
Проблема в том , что до того, как я начал делать react-router-dom
, мой компонент <AddProduct />
был внутри Products
, и я мог немедленно передать addProduct
функцию addProduct, поэтому я делал <AddProduct onSubmit={addProduct}/>
.
На данный момент я не знаю, что мне делать, чтобы передать свою addProduct
функцию <AddProduct>
компоненту, когда его сейчас нет внутри Products
.
addProduct выглядит так, если это имеет значение в данном случае:
import ProductsForm from './ProductsForm'
function AddProduct({onSubmit}) {
return (
<ProductsForm onSubmit={onSubmit} initialValues={{title: '', price: '', category: '', image: ''}} />
)
}
export default AddProduct;
Ответ №1:
Похоже, что вы можете извлечь выгоду из системы государственного управления. Вокруг есть несколько, в том числе redux и mobx. Вы также можете «свернуть свой собственный», используя встроенный Context
API react. Это позволяет вам хранить свое состояние в одном месте, и только те компоненты, которые в нем нуждаются, подписываются на хранилище данных или функций для изменения этих данных.
Если это только для небольшого приложения, вы можете обойтись без использования контекста (плюс это отличный инструмент у вас на поясе!). Это не так хорошо для больших приложений, так как оно предназначено только для управления небольшими типами данных