#reactjs #firebase #firebase-realtime-database
#reactjs #firebase #firebase-realtime-database
Вопрос:
Я супер-новичок в ReactJS. У меня есть курсовой проект, развернутый на Firebase (я не масштабировал динамически для разных разрешений, сейчас лучше на мобильных устройствах): https://clean-kitchen.web.app /
На данный момент рецепты жестко запрограммированы следующим образом:
class Home extends Component {
constructor(props) {
super(props);
this.state = {};
}
componentDidMount() {}
componentWillUnmount() {}
render() {
return <>
<GridCategory />
<Paper elevation={0} square style={{ marginTop: "8px", marginBottom: "8px", padding: "8px"}}>
<HeaderSuggestion title="Popular" icon="fire.png" />
<GridSuggestion recipe="pasta alla carbonara" img="carbonara.jpg" />
</Paper>
<Paper elevation={0} square style={{ marginTop: "8px", marginBottom: "8px", padding: "8px"}}>
<HeaderSuggestion title="Editor's Choice" icon="choice.png" />
<GridSuggestion recipe="Cheesecake" img="cheesecake.jpg" />
</Paper>
</>
}
}
Моя цель — извлекать текущие рецепты из базы данных в реальном времени и динамически создавать страницу. Дизайн базы данных в Firebase выглядит следующим образом:
Я пытаюсь извлечь узел базы данных следующим образом, но я не могу выполнить итерацию с помощью метода forEach.
var recipes = fire.database().ref("node_recipes/recipes");
Как я могу правильно выполнить итерацию по этой переменной и передать название рецепта и URL-адрес изображения в «GridSuggestion»? Спасибо!
Ответ №1:
Для итерации массива и возврата элемента JSX для каждого элемента этого используемого массива map
. Вы можете сделать что-то вроде этого:
{recipes.map(recipe => (
<GridSuggestion key={recipe.id} recipe={recipe.title} img={recipe.overviewImg} />
))}
Если вы хотите включить в цикл больше содержимого, например, ваши Paper
HeaderSuggestion
компоненты и, просто добавьте then в возврат карты
Комментарии:
1.Спасибо вам за ответ! Тем не менее, я получаю ошибку таким образом. Это связано с тем, как я извлекаю данные из базы данных (потому что это TypeError), но я не знаю, что не так. pasteboard.co/JI4gtkO.png pasteboard.co/JI4gCW1.png
2. Ошибка буквально говорит о проблеме.
recipes
это не массив. Сделайте консольный журналfire.database().ref("node_recipes/recipes")
и посмотрите, получите ли вы массив. Если нет, попробуйте найти, где находится массив.map
это функция для зацикливания массивов. Я предположилrecipes
, что это уже был массив из того, что вы сказали и опубликовали3. Как вы сказали, ошибка была связана с возвращаемым типом данных, и я ее исправил. Спасибо!
4. Нет проблем, рад, что смог помочь!