#reactjs #react-native #prop
Вопрос:
Если я напрямую передам функцию карты в качестве опоры, это сработает. Но это становится уродливым. Есть ли лучший способ подойти к этому. Я хочу, чтобы все выглядело чище.
<FoodInfo info={restaurant?.menu.map((item, index) => (
<View key={index} style={{alignItems: 'center'}}>
<View style={{height: Sizes.height * 0.35}}>
<Image source={item.photo} style={styles.image} />
</View>
</View>
))}
/>
Но если я отделю его, а затем передам как реквизит, это не сработает. Это дает мне ошибку
Функции недопустимы в качестве дочернего элемента React. Это может произойти, если вы вернете компонент вместо
<Component/>
отрисовки.
//Separated
const infoFunc = () => {
restaurant?.menu.map((item, index) => (
<View key={index} style={{alignItems: 'center'}}>
<View style={{height: Sizes.height * 0.35}}>
<Image source={item.photo} style={styles.image} />
</View>
</View>
));
};
//pass the function
<FoodInfo info={infoFunc}/>
Комментарии:
1. Более чистый способ IMO-передать
info={restaurant.menu}
и выполнить карту внутри компонента FoodInfo .2. Ваша функция ничего не возвращает, вот в чем проблема.
Ответ №1:
Ваша функция ничего не возвращает, потому что в ней отсутствует оператор возврата
const infoFunc = () => {
return restaurant?.menu.map((item, index) => (
<View key={index} style={{alignItems: 'center'}}>
<View style={{height: Sizes.height * 0.35}}>
<Image source={item.photo} style={styles.image} />
</View>
</View>
));
};
или используйте круглые скобки:
const infoFunc = () => (
restaurant?.menu.map((item, index) => (
<View key={index} style={{alignItems: 'center'}}>
<View style={{height: Sizes.height * 0.35}}>
<Image source={item.photo} style={styles.image} />
</View>
</View>
));
);
Если вы хотите передать такие компоненты, вы можете рассмотреть возможность передачи их как дочерних. Компоненты могут быть составными:
<FoodInfo>
{restaurant?.menu.map((item, index) => (
<View key={index} style={{alignItems: 'center'}}>
<View style={{height: Sizes.height * 0.35}}>
<Image source={item.photo} style={styles.image} />
</View>
</View>
))}
</FoodInfo>
Внутри FoodInfo вы можете затем получить и отобразить их props.children
.
Комментарии:
1. Моя ошибка, я пропустил ключевое слово return, иначе следовало бы использовать круглые скобки. Спасибо!