I am new to Reactjs so forgive me if this is lame. I am following the Reactjs docs for learning React and during the self implementation of exercise in components and props. And I encountered following weird behaviour: In the ‘Comment’ function <UserInfo ../> tag is working fine but <commentText ../> and <commentDate ../> is not working and for their respective functions VScode is saying that they are declared but their value is never used.
function formatDate(date) {
return date.toLocaleDateString();
}
function Avatar(props) {
return (
<img className="Avatar"
src={props.user.avatarUrl}
alt={props.user.name}/>
);
}
function UserInfo(props){
return (
<div className="UserInfo">
<Avatar user={props.person} />
<div className="UserInfo-Name">
{props.person.name}
</div>
</div>
);
}
function commentText(props){
return (
<div className="Comment-text">
{props.sentence}
</div>
);
}
function commentDate(props){
return(
<div className="Comment-date">
{formatDate(props.dates)}
</div>
);
}
function Comment(props) {
return (
<div className="Comment">
<UserInfo person={props.author}/>
<commentText sentence={props.text} />
<commentDate dates={props.date} />
</div>
);
}
const comment = {
date: new Date(),
text: 'I hope you enjoy learning React!',
author: {
name: 'Hello Kitty',
avatarUrl: 'https://placekitten.com/g/64/64',
},
};
ReactDOM.render(
<Comment
date={comment.date} text={comment.text}author={comment.author}
/>,
document.getElementById('root')
);
<html>
<head>
<script crossorigin src="https://unpkg.com/react@17/umd/react.production.min.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@17/umd/react-dom.production.min.js"></script>
</head>
<body>
<div id="root"></div>
</body>
</html>
Advertisement
Answer
Rename:
function commentText(props){
to
function CommentText(props){
and:
function commentDate(props) {
to
function CommentDate(props) {
Then:
<div className="Comment">
<UserInfo person={props.author}/>
<CommentText sentence={props.text} />
<CommentDate dates={props.date} />
</div>
React components are different from regular functions such that their first letter must be capital. It is good practice to structure react components as:
const CommentDate = (props) => {}
instead of
function CommentDate(props) {}