如何更改 React 组件的 属性?

How Can I change the property of components of React?

我是 React 的新手,最近开始研究它。我知道我们不能使用道具更改组件属性。

我想知道如何更改组件的属性? 下面是我的代码:

Courses.jsx

function Courses(){


return (
    <div className="courses">
        <h1>Ongoing Courses</h1>
        <div className="row">
        
        {CourseData.map((value,index)=>{
            return   (
              
                  <div className="col-md-3">
                  <Card title={value.title}  completed={value.completed} content={value.content} value="Resume !" key={index} id={index} />
                  </div>
             
            );
        })}
    </div>
    </div>
);
}

在上面我有一个名为 courseData 的数据数组,我将它映射到 Card 组件上。

Card.jsx:

function Card(props){

function handleClick(){
  
}
return (
    <div className="card">
        <div className="card-body">
            <h2 className="card-title">{props.title}</h2>
            {props.content}
            <br/>
        <button  className="btn btn-danger" > {props.value}</button>
        </div>
    </div>
);
}

CourseData 具有以下属性:

courseData : [{
key, 
title,
completed
content}]

我只是想,只要点击卡片上的按钮,courseData 的完成属性就会更改为通过道具传递的一些不同的值。

我已经尝试了很多但还是做不到。

有关此的任何帮助都会对我有所帮助。

courseData.jsx:

const notes = [{
key: 1,
title: "some Text",
completed:false,
content: "some Text"
},
 {
    key: 2,
   title: "some Text",
completed:false,
content: "some Text"
 }]
export default notes;
function Courses(){
const [coursesData, setCoursesData] = useState(CourseData)

return (
    <div className="courses">
        <h1>Ongoing Courses</h1>
        <div className="row">
        
        {coursesData.map((value,index)=>{
            return   (
                  <div className="col-md-3">
                  <Card coursesData={coursesData}  setCoursesData={setCoursesData} title={value.title}  completed={value.completed} content={value.content} value="Resume !" key={index} id={index} />
                  </div>
            );
        })}
    </div>
    </div>
);
function Card({id,title,value,content,coursesData,setCoursesData }){

function handleClick(e){
  e.preventDefault()
  setCoursesData(coursesData => {
      const data = coursesData
      data.splice(id,1,{
          title: title,
          completed: value,
          content: content,
          key: id
      })
      return data
  })
}
return (
    <div className="card">
        <div className="card-body">
            <h2 className="card-title">{title}</h2>
            {content}
            <br/>
        <button onClick={handleClick} className="btn btn-danger">{value}</button>
        </div>
    </div>
);

将 CourseData 添加到 Courses 组件的状态。然后添加一个方法来调整那里的数据。通过单击 Card 组件中的按钮时将调用的道具传递方法:

function Courses() {
  const [courseData, setCourseData] = useState(CourseData);
  const updateCourseData = (index) => {
    courseData.splice(index, 1);  
    setCourseData(courseData);
  }

  return (
    <div className="courses">
      <h1>Ongoing Courses</h1>
      <div className="row">
    
      {courseData.map((value,index)=>{
        return   (
          
              <div className="col-md-3">
              <Card title={value.title} updateCourseData={updateCourseData}  completed={value.completed} content={value.content} value="Resume !" key={index} id={index} />
              </div>
         
          );
      })}
      </div>
      </div>
   );
}

在Card.jsx中:

<button onClick={() => props.updateCourseData(props.id)}  className="btn btn-danger" > {props.value}</button>