Javascript 通过类外函数(或备选方案)操纵状态

Javascript 通过类外函数(或备选方案)操纵状态,javascript,reactjs,onclick,Javascript,Reactjs,Onclick,希望你今天过得愉快。考虑到我是多么的新手,这个问题可能会让你有点恼火 设置如下:我有一个投资组合网站的“项目”页面,其中有一个完整的项目,旁边有完整的图片和细节,下面是所有其他项目的列表。一旦其中一个被点击,特色项目就会改变。我敢肯定,这对大多数人来说都很简单,但我似乎被卡住了 以下是我目前的设置方式: 在组件类之外有一个名为“projects”的数组来存储它们,其中一个项目如下所示: { 关键字:0, 标题:“项目名称”, 说明: “公共知识”, 详情:[ "...", "...", "...

希望你今天过得愉快。考虑到我是多么的新手,这个问题可能会让你有点恼火

设置如下:我有一个投资组合网站的“项目”页面,其中有一个完整的项目,旁边有完整的图片和细节,下面是所有其他项目的列表。一旦其中一个被点击,特色项目就会改变。我敢肯定,这对大多数人来说都很简单,但我似乎被卡住了

以下是我目前的设置方式:

  • 在组件类之外有一个名为“projects”的数组来存储它们,其中一个项目如下所示:
  • {
    关键字:0,
    标题:“项目名称”,
    说明:
    “公共知识”,
    详情:[
    "...",
    "...",
    "..."
    ].map((detail,i)=>
  • {detail}
  • ), 图像:ImageObject },
  • 该函数(在类的render方法中引用)也位于主组件类之外,主组件类为每个项目生成div
  • 功能项目列表(道具){
    const projects=props.projects;
    const projectItems=projects.map(project=>(
    ));
    返回{projectItems};
    }
    
    渲染方法中的引用如下所示:

    
    
  • 现在我们进入Projects类,有一个状态值叫做'currentProjectIndex',还有一个'setProject'函数:
  • setProject=index=>{
    this.setState({currentProjectIndex:index});
    };
    
    一切正常,显示正确,如果我手动编辑状态,它确实会显示相关的项目,但我不确定如何继续。我曾尝试向div和a标记添加onClick属性,但似乎无法在main类之外引用setState,我认为这是有意义的,但如果将ProjectList函数放在main类中,则无法在render方法中识别它


    我意识到这可能是一些非常基本的东西,但我有一种感觉,我可能完全错误地进行了这个过程,我在这里完全走错了方向。要么就是我太傻了,这两个都是完全可能的。不管怎样,我非常感谢任何建议

    您可以尝试这样做:添加一个按钮,单击事件在其中调用setProject并将索引(即project.key,对吗?)作为参数传递。您还可能需要添加event.preventDefault。希望能有帮助。代码如下:

    setProject = (event, index) => {
       event.preventDefault();
       this.setState({ currentProjectIndex: index });
     };
    
    function ProjectList(props) {
      const projects = props.projects;
      const projectItems = projects.map(project => (
        <div key={project.key}>
          <a href="#">
            <img src={project.image} alt={project.title} />
          </a>
          <button
              type='button'
              onClick={event => { this.setProject(event, project.key) }}
          >
          Select this project
          </button>
        </div>
      ));
    
      return <div className="row">{projectItems}</div>;
    }
    
    setProject=(事件、索引)=>{
    event.preventDefault();
    this.setState({currentProjectIndex:index});
    };
    功能项目列表(道具){
    const projects=props.projects;
    const projectItems=projects.map(project=>(
    {this.setProject(event,project.key)}
    >
    选择此项目
    ));
    返回{projectItems};
    }
    
    不幸的是,仍然会出现与以前相同的错误:“无法读取未定义的属性'setProject'”我假设这是因为它无法识别'this'关键字,但我不知道如何解决此问题。也很抱歉回复太晚,很忙!非常感谢你的帮助!您是否将setProject作为道具传递给ProjectList?不是所有的英雄都戴斗篷!如果我按照你的建议去做,然后在ProjectList函数中通过键入'props.setProject'而不是'this.setProject'来调用setProject,它最终会工作!谢谢你这么长时间后的回复,谢谢你的帮助,你是个圣人。不客气,杰西!谢谢你的话。你能投票支持我的回答吗?(向上箭头)祝你度过愉快的一天!