So I am trying to move through pages in react, my goal is when I did validate the things I need (name, and number) the page will switch and I will be in another route. (without refresh the page). I tried to do it with window.location but its refreshing the page
I cant use <Link>
because I want to switch route only after the validation (inside IF condition) or I can and I don’t know-how.
my code :
JavaScript
x
84
84
1
import React, {useState} from 'react'
2
import {Link} from 'react-router-dom';
3
4
export default function Signup(props) {
5
6
const [name, setName] = useState(' ')
7
const [number, setNumber] = useState(' ')
8
const [forklift, setForklift] = useState(false)
9
const [styleNumber,setStyleNumber]= useState({
10
display:'none',
11
12
})
13
const [styleName,setStyleName]= useState({
14
display:'none',
15
16
})
17
18
let validNum=false;
19
let validName=false;
20
21
let driverLicense=()=>{
22
if(forklift === 'true'){
23
setForklift(true)
24
}
25
else{
26
setForklift(false)
27
}
28
29
if(number.length<5 || number.length>5){
30
setStyleNumber({
31
display:'block',
32
color:'red'
33
})
34
}
35
else{
36
validNum=true;
37
}
38
39
if(name.indexOf(' ')==-1|| name.length<4){
40
setStyleName({
41
display:'block',
42
color:'red'
43
})
44
}
45
else{
46
validName=true;
47
}
48
49
if(validNum && validName){
50
props.addWorker(name,number,forklift)
51
let myBtn=document.getElementById('button').innerHTML=<Link to='/'></Link>
52
console.log(myBtn)
53
}
54
else{
55
alert('Error')
56
}
57
58
59
60
}
61
62
63
64
return (
65
<div>
66
<h2>Sign up</h2>
67
<label>No.</label>
68
<input onChange={(e)=>{setNumber(e.target.value)}} type='number' maxLength='5'></input><br />
69
<br /> <p style={styleNumber}> the number must be with 5 digits.</p>
70
71
<label>Full Name:</label> <input onChange={(e)=>{setName(e.target.value)}} ></input><br /> <br />
72
<p style={styleName} >the name must contain minimum 4 characters.</p>
73
<label>Forkligt truck</label> <br /> <br />
74
75
<input onClick={(e)=>{setForklift(e.target.value)}} type="radio" name='Forklift' value="true"/>
76
<label >Yes</label><br/>
77
<input onClick={(e)=>{setForklift(e.target.value)}} type="radio" name='Forklift' checked value="false"/>
78
<label >no</label><br /> <br />
79
<button id='button' onClick={driverLicense}>Create</button>
80
81
82
</div>
83
)
84
}
Advertisement
Answer
I think what you want to achieve is to Redirect the page when you meet a condition
in this case
JavaScript
1
87
87
1
import React, {useState} from 'react'
2
import {Redirect} from 'react-router-dom';
3
4
export default function Signup(props) {
5
6
const [name, setName] = useState(' ')
7
const [isVerified, setIsVerified = useState(false);
8
const [number, setNumber] = useState(' ')
9
const [forklift, setForklift] = useState(false)
10
const [styleNumber,setStyleNumber]= useState({
11
display:'none',
12
13
})
14
const [styleName,setStyleName]= useState({
15
display:'none',
16
17
})
18
19
let validNum=false;
20
let validName=false;
21
22
let driverLicense=()=>{
23
if(forklift === 'true'){
24
setForklift(true)
25
}
26
else{
27
setForklift(false)
28
}
29
30
if(number.length<5 || number.length>5){
31
setStyleNumber({
32
display:'block',
33
color:'red'
34
})
35
}
36
else{
37
validNum=true;
38
}
39
40
if(name.indexOf(' ')==-1|| name.length<4){
41
setStyleName({
42
display:'block',
43
color:'red'
44
})
45
}
46
else{
47
validName=true;
48
}
49
50
if(validNum && validName){
51
props.addWorker(name,number,forklift)
52
setIsVerified(true);
53
}
54
else{
55
alert('Error')
56
}
57
58
59
60
}
61
62
63
if (isVerified) {
64
return <Redirect to="/" />
65
}
66
return (
67
<div>
68
<h2>Sign up</h2>
69
<label>No.</label>
70
<input onChange={(e)=>{setNumber(e.target.value)}} type='number' maxLength='5'></input><br />
71
<br /> <p style={styleNumber}> the number must be with 5 digits.</p>
72
73
<label>Full Name:</label> <input onChange={(e)=>{setName(e.target.value)}} ></input><br /> <br />
74
<p style={styleName} >the name must contain minimum 4 characters.</p>
75
<label>Forkligt truck</label> <br /> <br />
76
77
<input onClick={(e)=>{setForklift(e.target.value)}} type="radio" name='Forklift' value="true"/>
78
<label >Yes</label><br/>
79
<input onClick={(e)=>{setForklift(e.target.value)}} type="radio" name='Forklift' checked value="false"/>
80
<label >no</label><br /> <br />
81
<button id='button' onClick={driverLicense}>Create</button>
82
83
84
</div>
85
)
86
}
87