0%

hook组件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
import { render } from '@testing-library/react';
import React ,{useEffect, useState} from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import img from './logo512.png'
// import MyErrorBoundery from './MyErrorBoundery';
// import{ThemeContext, themes} from './theme-context';
// import ThemedButton from'./themed-button';
// import PropoTypes from "prop-types"

const useForm = (init)=>{
const [form, setForm] = useState(init)
const handleChange = (e)=>{
setForm({...form, [e.target.name]: e.target.value})
}
return [form, handleChange]
}

function Tool(){
useEffect(()=>{

const focusUseName=(e)=>{

if(e.keyCode===9){
document.querySelector('input[name="usename"]').style.borderColor="red"
}
}
window.addEventListener('keydown' ,focusUseName);

return ()=>{
window.removeEventListener('keydown' ,focusUseName)
}
})
return(
<h1>工具人</h1>
)
}


function App(){
const [showTool, setShowTool] = useState(false)
const [form, setForm] =useState({usename:"", password :""});
const [pokemon,setPokemon] =useState({})
const [isLoading, setIsLoading]=useState({}) //解决图片显示不出来的问题
const [number, setNumber]=useState(1)

useEffect( ()=>{
const fn = async ()=>{
setIsLoading(true); //在开始时设置为true
const apiData = await fetch(`https://pokeapi.co/api/v2/pokemon/${number}/`)
const data =await apiData.json()
setPokemon(data)
setIsLoading(false); //在结束时设置为false
console.log(data);
}
fn();
},[number])


// useEffect(()=>{
// console.log('show');
// return ()=>{
// console.log('display');
// }
// },[form.usename])

return(
<>
<input type="text" value={form.usename} name="usename"
onChange={(e=>setForm({...form, usename: e.target.value,}))}
/>

<input type="text" value={form.password} name="password"
onChange={(e=>setForm({ ...form, password: e.target.value}))}
/>
<div>
<button onClick={()=>setShowTool(!showTool)}>召唤工具人</button>
</div>

{ showTool && < Tool />}
<h1>{pokemon.name}</h1>
<button onClick={()=>setNumber(number+1)}>点我召唤神兽</button>
<img alt="" src={pokemon.sprites?.front_default}
width="100px" height="100px" transform="scale(1)"/>
{/* ?是为了解决图片资源访问不到 */}
</>
)

}



ReactDOM.render(
<App/>,
document.getElementById('root')
);