Javascript 通过类外函数(或备选方案)操纵状态
希望你今天过得愉快。考虑到我是多么的新手,这个问题可能会让你有点恼火 设置如下:我有一个投资组合网站的“项目”页面,其中有一个完整的项目,旁边有完整的图片和细节,下面是所有其他项目的列表。一旦其中一个被点击,特色项目就会改变。我敢肯定,这对大多数人来说都很简单,但我似乎被卡住了 以下是我目前的设置方式:Javascript 通过类外函数(或备选方案)操纵状态,javascript,reactjs,onclick,Javascript,Reactjs,Onclick,希望你今天过得愉快。考虑到我是多么的新手,这个问题可能会让你有点恼火 设置如下:我有一个投资组合网站的“项目”页面,其中有一个完整的项目,旁边有完整的图片和细节,下面是所有其他项目的列表。一旦其中一个被点击,特色项目就会改变。我敢肯定,这对大多数人来说都很简单,但我似乎被卡住了 以下是我目前的设置方式: 在组件类之外有一个名为“projects”的数组来存储它们,其中一个项目如下所示: { 关键字:0, 标题:“项目名称”, 说明: “公共知识”, 详情:[ "...", "...", "...
{
关键字:0,
标题:“项目名称”,
说明:
“公共知识”,
详情:[
"...",
"...",
"..."
].map((detail,i)=>{detail} ),
图像:ImageObject
},
功能项目列表(道具){
const projects=props.projects;
const projectItems=projects.map(project=>(
));
返回{projectItems};
}
渲染方法中的引用如下所示:
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,它最终会工作!谢谢你这么长时间后的回复,谢谢你的帮助,你是个圣人。不客气,杰西!谢谢你的话。你能投票支持我的回答吗?(向上箭头)祝你度过愉快的一天!