Professional Documents
Culture Documents
TESTES
TESTES
const
UsersList
= ()
=>
{
useEffect
(()
=>
{
const
dispatch
=
useDispatch
();
dispatch
(
getUsers
());
}, [
dispatch
]);
const
{
value
,
isLoading
,
err
} =
useSelector
((
state
)
=>
state
.
user
);
const
users
=
(
useEffect
(()
=>
{
<div>
dispatch
(
getUsers
());
{
value
.
length
>
0
?
value
.
m
ap
((
item
)
=>
<
UserItem
user
=
{
i
tem
}
key
=
{
item
.
id
}
/>
) :
null}
}, [
dispatch
]);
</div>
);
const
users
= (
<div>
if
(
err
!==
null
) {
{
value
.
length
>
0
?
value
.
m
ap
((
item
)
=>
<
UserItem
user
=
{
i
tem
}
key
=
{
item
.
id
}
/>
) :
null}
return
<h1>
{
err
}
<
/h1>
;
</div>
}
);
return
(
if
(
err
!==
null
) {
<div
className
=
"
container mt-5"
>
return
<h1>
{
err
}
</h1>
;
<h1>
Users List
</h1>
}
{
isLoading
?
'Loading...'
:
users
}
{
value
.
length
===
0
&& !
isLoading
&&
<h2>
There are no users
</h2>
}
<
br
/>
<
NavLink
to
=
"/addUser"
><button>
Add User
</button></
NavLink
>
</div>
);
return
(
};
<div
className
=
"
container mt-5"
>
export
default
UsersList
;
<h1>
Users List
</h1>
{
isLoading
?
'Loading...'
:
users
}
Etape 2: Donner les scripts en React JS des composants suivants :
1. **<App/>:** - Dans `components/App.js`: {
value
.
length
===
0
&& !
isLoading
&&
<h2>
There are no users
</h2>
}
<
br
/>
import
React
from
"react"
;
<
NavLink
to
=
"/addUser"
><button>
Add User
</button></
NavLink
>
import
store
from
"../features/store"
;
</div>
);
email:
user
.
email
,
};
});
export
default
UsersList
;
}
3. **<UserItem/>:** - Dans `components/UserItem.js`: }, [
user
]);
//UserItem.js
import
React
from
"react"
;
const
handleInputChange
=
(
e
)
=>
{
import
{
useDispatch
}
from
"react-redux"
;
setUserData
({
...
userData
,
[e.target.name]:
e
.
target
.
value
,});
import
{
NavLink
}
from
"react-router-dom"
;
};
import
{
deleteUser
}
from
"../features/usersSlice"
;
const
handleSubmit
=
(
e
)
=>
{
export
default
function
UserItem
(
props
) {
e
.
preventDefault
();
const
{
name
,
username
,
email
,
id
} =
props
.
user
;
dispatch
(
updateUser
({
id:
user
.
id
,
...
userData
}));
const
dispatch
=
useDispatch
();
navigate
(
"/"
);
};
const
handleDelete
= ()
=>
{
dispatch
(
deleteUser
(
id
));
return
(
};
<>
<h1>
Edit User
</h1>
return
( <form
onSubmit
=
{
h
andleSubmit
}
>
<>
Name:
<div
style
=
{
{
"
border"
:
"2px solid black"
}
}
>
<input
type
=
"text"
name
=
"
name"
value
=
{
userData
.
name
}
onChange
=
{
h
andleInputChange
}
/><br/>
<h3>
{
name
}
<
/h3> Username:
<p>
@
{
username
}
</p> <input
type
=
"text"
name
=
"
username"
value
=
{
userData
.
username
}
<p>
{
email
}
</p>
onChange
=
{
handleInputChange
}
/><br/>
<
NavLink
to
=
{
̀/userEdit/
${
id
}
̀
}
><button>
Edit
</button></
NavLink
>
Email:
<button
onClick
=
{
handleDelete
}
>
Delete
</button>
<input
type
=
"text"
name
=
"
email"
value
=
{
userData
.
email
}
onChange
=
{
handleInputChange
}
/
><br/>
</div>
<button
type
=
"submit"
>
Update User
</button><br/>
</>
<
Link
to
=
"/"
><button>
back
</button></
Link
>
);
</form>
}
</>
4. **<UserEdit/>:** - Dans `components/UserEdit.js`: );
// UserEdit.js
};
import
React
, {
useState
,
useEffect
}
from
"react"
;
export
default
UserEdit
;
import
{
useDispatch
,
useSelector
}
from
"react-redux"
;
import
{
useParams
,
useNavigate
}
from
"react-router-dom"
;
import
{
updateUser
}
from
"../features/usersSlice"
;
import
{
Link
}
from
"react-router-dom"
;
const
UserEdit
=
()
=>
{
const
dispatch
=
useDispatch
();
const
navigate
=
useNavigate
();
const
{
id
}
=
useParams
();
const
user
=
useSelector
((
state
)
=>
state
.
user
.
value
.
find
((
item
)
=>
item
.
id
===
parseInt
(
i
d
)));
const
[
userData
,
setUserData
]
=
useState
({
name:
user
?
user
.
n
ame
:
""
,
username:
user
?
user
.
username
:
""
,
email:
user
?
user
.
email
:
""
,
});
useEffect
(()
=>
{
if
(
u
ser
) {
setUserData
({
name:
user
.
n
ame
,
username:
user
.
username
,
AddUser.js:
// AddUser.js
import
React
, {
useState
}
from
"react"
;
import
{
useDispatch
}
from
"react-redux"
;
import
{
addUser
}
from
"../features/usersSlice"
;
import
{
L
ink
,
useNavigate
}
from
"react-router-dom"
;
const
AddUser
=
()
=>
{
const
dispatch
=
useDispatch
();
const
navigate
=
useNavigate
();
const
[
userData
,
setUserData
]
=
useState
({
name:
""
,
username:
""
,
email:
""
,
});
const
handleChange
=
(
e
)
=>
{
setUserData
({
...
userData
,
[e.target.name]:
e
.
target
.
value
,});
};
const
handleSubmit
=
(
e
)
=>
{
e
.
preventDefault
();
dispatch
(
addUser
(
userData
));
navigate
(
"/"
);
};
return
(
<>
<h2>
Add User
</h2>
<form
onSubmit
=
{
h
andleSubmit
}
>
Name:
<input
type
=
"
text"
name
=
"
name"
value
=
{
userData
.
name
}
onChange
=
{
h
andleChange
}
/><br/>
Username:
<input
type
=
"
text"
name
=
"
username"
value
=
{
userData
.
username
}
onChange
=
{
handleChange
}
/><br/>
Email:
<input
type
=
"
text"
name
=
"
email"
value
=
{
userData
.
email
}
onChange
=
{
handleChange
}
/><br/>
<button
type
=
"submit"
>
Add User
</button><br/>
<
Link
to
=
"/"
><button>
back
</button></
Link
>
</form>
</>
);
};
export
default
AddUser
;