[英]React useState() issue
I have a problem with using function component.我在使用 function 组件时遇到问题。 I'm writing Hangman game and i stuck while trying to do staff about letters discovering.
我正在写刽子手游戏,但我在尝试让员工了解信件发现时卡住了。 Here is my code.
这是我的代码。
App.js应用程序.js
import CreateSubject from './components/CreateSubject'
import Hangman from './components/Hangman'
import { HangmanProvider } from './context/HangmanContext'
function App() {
return (
<HangmanProvider>
<div className="App">
<CreateSubject/>
<Hangman/>
</div>
</HangmanProvider>
);
}
export default App;
CreateSubject.js CreateSubject.js
import {HangmanContext } from '../context/HangmanContext'
function CreateSubject(props){
const {password,displayGame,displayForm} = useContext(HangmanContext)
const [subject,setSubject] = password
const [gameDisplay,setGameDisplay] = displayGame
const [createSubjectDisplay,setCreateSubjectDisplay] = displayForm
const handleSubmit = (e) =>{
e.preventDefault()
if(subject != ''){
setCreateSubjectDisplay('none')
setGameDisplay('')
}
}
const handleChange = (e) =>{
setSubject(e.target.value)
e.target.value = subject
}
return(
<form style={{display: createSubjectDisplay}} onSubmit={handleSubmit}>
<label>
<div>Enter a Word:</div>
<input type='text'
value={subject}
onChange={handleChange}
className='createSubject'
maxLength='40'/>
</label>
<button type='submit'>Create</button>
</form>
)
}
export default CreateSubject
Hangman.js刽子手.js
import al from '../alphabet'
import {HangmanContext} from '../context/HangmanContext'
const Hangman = (props) =>{
const {password,displayGame,displayForm} = useContext(HangmanContext)
const [subject,setSubject] = password
const [gameDisplay,setGameDisplay] = displayGame
const [createSubjectDisplay,setCreateSubjectDisplay] = displayForm
let passwordArr = Array.from(subject)
const [hiddenPassword,changeHiddenPassword] = useState()
useEffect(() => {
let passwordArr = Array.from(subject)
changeHiddenPassword(passwordArr.map(item => '_'))
},[]);
const chooseLetter = (e) => {
let letter = e.target.innerHTML
passwordArr.forEach((e,i) => {
if (e == letter){
console.log(hiddenPassword)
}
})
}
const letters = al.map((letter) =>
<span onClick={chooseLetter}>{letter}</span>
)
return(
<div style={{display:gameDisplay}}>
<div className='password'>
{
//passwordArr.map((item,i) => <span>{hiddenPasswordArr[i]}</span>)
}
</div>
<div className='wrapper'>
<div className='pass_input'>Enter password:<input type='text' maxLength='30'/></div>
<div className='alphabet'> {letters} </div>
</div>
</div>
)
}
export default Hangman
My problem is in Hangman.js when i'm trying to change 'hiddenPassword' state which is an array.当我尝试更改作为数组的 'hiddenPassword' state 时,我的问题出在 Hangman.js 中。 When i'm outputing this state in console it shows me an empty array.
当我在控制台中输出这个 state 时,它显示了一个空数组。 What have i done wrong?
我做错了什么?
You need to initialize your hiddenPassword
state:您需要初始化您的
hiddenPassword
state:
const [hiddenPassword,changeHiddenPassword] = useState(passwordArr.map(item => '_'))
subject
might have to be in the useEffect
's dependency array subject
可能必须在useEffect
的依赖数组中
useEffect(() => {
let passwordArr = Array.from(subject)
changeHiddenPassword(passwordArr.map(item => '_'))
},[subject]);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.