Olá pessoal,
Estou com um problema, e gostaria da ajuda de vocês, se possível.
Estou desenvolvendo uma loja online com ReactJS, e estava adaptando o tutorial do SimpleTut no Youtube. Mas me deparei com um erro persistente, que não consigo achar uma solução. Segue ele ai:
> TypeError: Cannot read property 'products' of undefined
mapState C:/Users/Issidios/SiteMagalhaes/src/admin/cadastro/produtos/AdminNovoCadastroProdutos.js:20
17 | const AdminNovoCadastroProdutos = props => {
18 |
19 | const mapState = ({ productsData }) => ({>
20 | products: productsData.products
21 | });
22 | const { products } = useSelector(mapState);
23 | const dispatch = useDispatch();
Eu não sei ponde pode estar o problema, mas vou deixar o código inteiro da pagina com problema para ver se vocês podem me ajudar.
import React, { useEffect, useState } from 'react';
import { Link } from 'react-router-dom';
import { useDispatch, useSelector } from 'react-redux';
import { addProductStart, fetchProductsStart, deleteProductStart } from './../../../store/reducers/Produtos/products.actions';
import FormInput from './../../../loja/componentes/forms/FormInput';
import FormSelect from './../../../loja/componentes/forms/FormSelect';
import { Carousel } from 'react-responsive-carousel';
import "react-responsive-carousel/lib/styles/carousel.min.css";
import userIMG from './../../../loja/assets/user.png';
import CKEditor from 'ckeditor4-react';
const mapState = ({ productsData }) => ({
product: productsData.products.product
});
const AdminNovoCadastroProdutos = props => {
const { product } = useSelector(mapState);
const dispatch = useDispatch();
const [productType, setProductType] = useState('solar');
const [productName, setProductName] = useState('');
const [productThumbnail, setProductThumbnail] = useState('');
const [productPrice, setProductPrice] = useState(0);
const [productQuantidade, setProductQuantidade] = useState(0);
const [productVoltagem, setProductVoltagem] = useState(0);
const [productDesc, setProductDesc] = useState('');
const { data, queryDoc, isLastPage } = product;
useEffect(() => {
dispatch(
fetchProductsStart()
);
}, []);
const resetForm = () => {
setProductType('mens');
setProductName('');
setProductThumbnail('');
setProductPrice(0);
setProductDesc('');
setProductQuantidade(0);
setProductVoltagem(0)
};
const handleSubmit = e => {
e.preventDefault();
dispatch(
addProductStart({
productType,
productName,
productThumbnail,
productPrice,
productDesc,
productQuantidade,
productVoltagem,
})
);
resetForm();
};
const handleLoadMore = () => {
dispatch(
fetchProductsStart({
startAfterDoc: queryDoc,
persistProducts: data
})
);
};
const configLoadMore = {
onLoadMoreEvt: handleLoadMore,
};
return (
<div className='bg-grey'>
<div className='container '>
<h2>Novo Produto</h2>
<form onSubmit={handleSubmit}>
<div className='col-sm-6'>
<Carousel>
<div>
<img src={userIMG} />
<p className="legend">Legend 1</p>
</div>
<div>
<img src={userIMG} />
<p className="legend">Legend 2</p>
</div>
<div>
<img src={userIMG} />
<p className="legend">Legend 3</p>
</div>
</Carousel>
<label htmlFor="imagemPortfolio">Imagem Portfólio</label>
<input type="file" className="form-control-file" id="imagemPortfolio" />
</div>
<div className="col-sm-6">
<FormInput
label="Nome"
type="text"
handleChange={e => setProductName(e.target.value)}
/>
<FormSelect
label="Tipo"
options={[{
value: "solar",
name: "Placa Solar"
}, {
value: "kit",
name: "Kit Solar"
}]}
handleChange={e => setProductType(e.target.value)}
/>
<CKEditor
onChange={evt => setProductDesc(evt.editor.getData())}
/>
<FormInput
label="Preço"
type="number"
min="0.00"
max="1000000.00"
step="0.01"
handleChange={e => setProductPrice(e.target.value)}
/>
<FormInput
label="Quantidade"
type="number"
min="0"
max="1000000"
handleChange={e => setProductQuantidade(e.target.value)}
/>
<FormInput
label="Voltagem Gerada"
type="number"
min="0.00"
max="1000000.00"
step="0.01"
handleChange={e => setProductVoltagem(e.target.value)}
/>
</div>
<br />
<button type="submit" className="btn btn-primary">Salvar</button>
<Link to='/admin/portfolio'>
<button className="btn btn-primary btn-cancelar">Cancelar</button>
</Link>
</form>
</div>
<br />
</div>
);
}
export default AdminNovoCadastroProdutos;
Desde já agradeço.