Почему некоторый метод возвращает неопределенное в перехватах React, а не в классах React

#javascript #reactjs #react-native

#javascript #reactjs #react-native

Вопрос:

Здравствуйте, я новичок в react, и я создаю приложение для ресторана, поэтому я столкнулся с проблемой, которая возникает, когда я преобразовал свое приложение класса react в перехватчики react, почему это плохо работает в перехватчиках React, если в классах React это работает

 const RenderDish = (props) => {
const dish = props.dish;

if (dish != null) {
    return (
        <Card
            featuredTitle={dish.name}
            image={require('./images/uthappizza.png')}
            >
            <Text style={{ margin: 10 }}>
                {dish.description}
            </Text>
            <Icon 
                raised
                reverse 
                name={ props.favorite ? 'heart' : 'heart-o' }
                type='font-awesome'
                color='#f50'
                onPress={() => props.favorite ? console.log('Already favorite') : props.onPress()}
            />
        </Card>
    );
}
else {
    return(
        <View></View>
    )
}}


const Dishdetail = (props) => {

const [dishes, setDishes] = useState(DISHES);
const [comments, setComments] = useState(COMMENTS);
const [favorites, setFavorites] = useState([])

const markFavorite = (dishId) => setFavorites({ favorites: favorites.concat(dishId) })

const dishId = props.route.params.dishId;

return (
    <ScrollView>
        <RenderDish dish={dishes[ dishId]} 
            favorite={favorites.some(el => el === dishId)}
            onPress={() => markFavorite(dishId)}
            />
        <RenderComments comments={comments.filter(comment => comment.dishId === dishId)} />
    </ScrollView>
);}  
  

Это синтаксис ошибки

Ошибка типа: избранное.some не является функцией, (В ‘favorites.some(function (el) { return el === dishId; })’избранное.some’ не определено)

Ответ №1:

У вас несовпадающие типы: вы устанавливаете объект здесь: setFavorites({ favorites: favorites.concat(dishId) }) а затем пытаетесь получить доступ к некоторому методу массива здесь: favorites.some(el => el === dishId)

Обновите, чтобы установить массив:

 setFavorites(favorites.concat(dishId));
  

Комментарии:

1. Боже, это правда, большое тебе спасибо, Сэмюэль, я этого не видел. Этого больше не произойдет