#reactjs
Вопрос:
const { recipeId } = useParams(); const { loading, data } = useQuery(QUERY_SINGLE_RECIPE, { variables: { recipeId: recipeId }, }); // THESE CODES HERE SHOULD GRAB THE RECIPE AND LOAD THE PRESET DATA // INTO THE RESPECTFUL AREAS OF THE FORM const recipe = data?.recipe || {}; // console.log('recipe'); // console.log(recipe); let ingredientList = ['']; if (recipe?.ingredients) { for (let a = 0; a lt; recipe.ingredients.length; a ) { ingredientList = (recipe.ingredients[a] 'rn'); // console.log(ingredientList); } } let directionList = ['']; if (recipe?.directions) { for (let b = 0; blt; recipe.directions.length; b ) { directionList = (recipe.directions[b] 'rn'); // console.log(directionList); } } // THESE NEXT CODES SHOULD, IN MOST BASIC TERMS, USE A USESTATE TO BASICALLY // CREATE AN UPDATED RECIPE. SHOULD HAVE THE SAME CODE AS THE ADD/CREATE NEW RECIPE const [updateRecipe, setUpdateRecipe] = useState({ title: recipe.title, category: recipe.cateogry, servings: recipe.servings, totalTime: recipe.totalTime, ingredients: recipe.ingredients, directions: recipe.directions, imageid: recipe.imageid });
Когда консоль вошла в систему, updateRecipe отображается как объект с неопределенным значением, как мне получить рецепт обновления, чтобы отобразить объект, который позже будет обновлен в форме?
Комментарии:
1. Я думаю, что ответ Якобо находится на правильном пути, пусть ваш рецепт обновления начнется как пустой объект, затем в эффекте использования проверьте объект рецепта, а затем установите значение setUpdateRecipe({…рецепт}) Также я думаю, что в ваших циклах for вы захотите использовать список ингредиентов[0] = и список направлений[0] =. или вам следует использовать .push (), если вы хотите добавить их в массив, а не пустую строку в вашем массиве.
Ответ №1:
Проблема, с которой вы столкнулись, заключается в том, что вы не реагируете на обновление состояния. Если я не ошибаюсь (я не вижу, какие библиотеки вы используете), useQuery
он запрашивает что-то из API GQL. data
будет реактивной переменной, для которой вам придется использовать useEffect
крючок, чтобы отреагировать на это изменение. Поэтому, если вы добавите
useEffect(()=gt;{ console.log(data) },[data]);
Вы должны получить данные, как только они будут получены с сервера, и обновить состояние в функции useEffect
обратного вызова.
Комментарии:
1. Спасибо!! Отсутствующий эффект использования помог!!