#javascript #reactjs #firebase #firebase-realtime-database
#javascript #reactjs #firebase #firebase-realtime-database
Вопрос:
Я разрабатываю приложение cart, и мои товары хранятся в базе данных firebase. При извлечении данных я получаю каждый продукт отдельно в виде массива. Здесь я использую Context API. Ниже приведен код.
class ProductProvider extends Component {
state = {
products: []
};
componentDidMount() {
this.setProducts();
}
setProducts() {
let products = [];
let product = firebaseConfig.database().ref("dataJson");
product.on("child_added", snap => {
products = snap.val()
this.setState(
() => {
return { products };
}
, () => console.log(this.state)
);
});
}
render() {
return (
<ProductContext.Provider
value={{
...this.state
}}
>
{this.props.children}
</ProductContext.Provider>
);
}
}
const ProductConsumer = ProductContext.Consumer;
export { ProductProvider, ProductConsumer };
Комментарии:
1. Не могли бы вы подробнее рассказать о том, что не работает должным образом, и как бы вы хотели, чтобы это работало?
2. Я хочу, чтобы мои продукты были массивом объектов.
3. И что происходит в данный момент? Ваш вопрос не очень ясен.
4. {products:{…}} {products:{…}} {products:{…}} {products:{…}} {products:{… }} Я получаю подобное в console.log (this.state
5. у каждого {products:{…}} есть один продукт
Ответ №1:
Попробуйте перенести ваше значение для каждой записи в вашей базе данных в массив products следующим образом:
setProducts() {
let product = firebaseConfig.database().ref("dataJson");
product.on("child_added", snap => {
let products = [];
products.push(snap.val());
this.setState({ products });
});
}
Комментарии:
1. в console.log (this.state.products) я получаю 8 массивов объектов, в каждом из которых есть все 8 продуктов
2. Что именно содержит one snap.val()? (Не работает с firebase.) Похоже, snap.val() уже содержит все объекты. В этом случае попробуйте поставить let products = []; перед аргументом this.setState . (Смотрите обновленный код.)