【发布时间】:2022-12-01 01:56:35
【问题描述】:
我试图将状态值传递到组件中。为什么它在一个组件中工作而不在同一文件夹中的另一个组件中工作?
我这里有钩子。我正在尝试访问“currentGuess”。在这个函数中,我将 currentGuess 的状态初始化为“”,然后下一部分只是将“currentGuess”设置为您输入的任何内容。
----------------------/src/hooks/useWordle.js----------------------
const useWordle = (solution) => {
const [currentGuess, setCurrentGuess] = useState("");
/* OTHER UNNECESSARY CODE TO QUESTION */
const handleInput = ({ key }) => {
if (key === "Enter") {
if (turn > 5) {
console.log("You used all your guesses!");
return;
}
if (history.includes(currentGuess)) {
console.log("You already tried that word!");
return;
}
if (currentGuess.length !== 5) {
console.log("Word must be 5 characters long!");
return;
}
const formatted = formatGuessWord();
console.log(formatted);
}
if (key === "Backspace") {
setCurrentGuess((state) => {
return state.slice(0, -1);
});
}
if (/^[a-zA-z]$/.test(key))
if (currentGuess.length < 5) {
setCurrentGuess((state) => {
return state + key;
});
}
};
return {
currentGuess,
handleInput,
};
};
export default useWordle;
我可以像这样在这里使用它并且没有问题:
----------------------源代码/组件/Word.js----------------------
import React, { useEffect } from "react";
import useWordle from "../hooks/wordleHooks.js";
function Wordle({ solution }) {
const { currentGuess, handleInput } = useWordle(solution);
console.log("currentGuess=", currentGuess);
useEffect(() => {
window.addEventListener("keyup", handleInput);
return () => window.removeEventListener("keyup", handleInput);
});
return <div>Current guess: {currentGuess}</div>;
}
export default Wordle;
我认为这条线让我可以使用“currentGuess”。我破坏了它。
const { currentGuess, handleInput } = useWord(solution);
但是,当我将该行放在这段代码中时,“currentGuess”未定义或为空。
----------------------/src/components/Key.js----------------------
import React, { useContext } from "react"; import { AppContext } from "../App"; import useWordle from "../hooks/wordleHooks.js"; export default function Key({ keyVal, largeKey }) { const { onSelectLetter, onDeleteKeyPress, onEnterKeyPress } = useContext(AppContext); const { currentGuess } = useWordle(); const handleTypingInput = () => { console.log("Key.js - Key() - handleTypingInput() - {currentGuess}= ", { currentGuess, }); // COMES OUT "Object { currentGuess: "" }" };如果你做到了这一步,非常感谢你。我对此很陌生,希望知道自己在做什么的人可以看到我可以修复的代码中的一些明显缺陷。你甚至不必为我解决它,但你能给我指明正确的方向吗?如何使“currentGuess”变量/状态可以在密钥.js零件?
【问题讨论】:
-
如需将来参考,请参阅:How do I create a React Stack Snippet?。当它是交互式 sn-p 时,它可以更容易地快速运行代码,从而为您提供更好的答案。
-
当它的多个文件/组件到处都是时,你能做到吗?你如何在他们给你的一个 JS 块中添加一堆文件和子组件来相互传递东西?我可以只上传到 github 并以这种方式转换吗?
标签: javascript reactjs react-hooks state object-destructuring