#reactjs
Вопрос:
У меня есть следующий компонент react
export default function AssetDropZone({ testVal }) {
console.log(testVal); //this one works
const [{ canDrop, isOver, isDragging }, onDropTarget] = useDrop({
accept: [ItemTypes.File],
drop(item) {
console.log(testVal) //this one returns undefined
},
collect: monitor => ({
canDrop: monitor.canDrop(),
isOver: monitor.isOver(),
isDragging: monitor.getItem() !== null amp;amp; monitor.canDrop()
})
});
}
Я пытаюсь вывести testVal
на печать, когда drop()
выполняется метод, однако каждый раз, когда я его запускаю, значение testVal
равно undefined
.
Я знаю, что другие функции реакции, например useCallback()
, имеют возможность передавать массив переменных, которые вы хотите использовать в функции, однако, когда я пытаюсь сделать то же самое с этим, это, похоже, не имеет никакого эффекта.
Я дважды проверил, что testVal
определено, но в настоящее время я в недоумении относительно того, что происходит. У кого-нибудь есть опыт в этом деле?
Комментарии:
1. Можете ли вы показать, что используется
AssetDropZone
? Похоже, для чего бы он ни использовалсяAssetDropZone
, он передается неопределеннымtestVal
.2. Я отредактировал исходный пост, чтобы показать, что он действительно определен. Если я печатаю значение вне
useDrop()
вызова функции, то оно печатается правильно, если я печатаю его внутри, то оно не определено. Похоже, это какая-то проблема с областью применения, но я понятия не имею, как это обойти3.
AssetDropZone()
компонент может быть вызван несколько раз. Называется лиundefined
это в какое-либо время в будущем? Либо это, либо случайная установкаtestVal
значения undefined позже-единственные причины, по которым он может «волшебным образом изменить значения».4.Нет, только один раз печатаю на консоль и использую поиск по VS-коду, похоже, он больше нигде не используется, кроме одного раза, для которого я его использую. Как я уже говорил в OP, я столкнулся с аналогичной проблемой,
useCallBack()
когда был способ передать массив переменных, ноuseDrop
сказал, что это работает таким образом, но я, похоже, не могу заставить его работать.5. react-dnd.github.io/react-dnd/docs/api/use-drop Это утверждает, что он принимает массив зависимостей точно так же, как
useMemo
илиuseCallback
или что-то еще. Просто для проверки, добавили ли вы определенные метки в консоль. журналы (напримерconsole.log('First test val', testVal)
), чтобы убедиться, что он никогда не был определен в первом?