gpt4 book ai didi

javascript - 如何在同一个元素上使用多个 React 组件?

转载 作者:行者123 更新时间:2023-11-28 03:34:54 25 4
gpt4 key购买 nike

我想将鼠标悬停在一个 div 上,获取该 div 内的图像,显​​示它,然后使图像跟随我的光标。悬停组件正在工作,但我无法使跟随光标组件工作。你会怎样做呢?

组件编号 1:

import React from 'react';

class FollowMouse extends React.Component {

state = {
xPos: 0,
yPos: 0
};

onMouseMove(e) {
this.setState({
xPos: e.screenX,
yPos: e.screenY
});
}

render() {
return (
<div
onMouseMove={this.onMouseMove.bind(this)}
className="img-ctn"
>
{this.props.children(this.state.xPos, this.state.yPos)}
</div >
);
}
}
export default FollowMouse;

组件 2:

import React from 'react';

class HoverProject extends React.Component {

state = {
isHovered: false,
};

onMouseEnter() {
this.setState({ isHovered: true });
}
onMouseLeave() {
this.setState({ isHovered: false });
}

render() {
return (
<div
onMouseEnter={this.onMouseEnter.bind(this)}
onMouseLeave={this.onMouseLeave.bind(this)}
className="project-item"
>
{this.props.children(this.state.isHovered)}
</div >
);
}
}
export default HoverProject;

然后是父组件。

import React from 'react';

// modules
import HoverProject from '../modules/HoverProject';
import FollowMouse from '../modules/FollowMouse';


import VLEC from '../images/vlec.png';

class ProjectList extends React.Component {

constructor(props) {
super(props);

this.sels = {
state: 'active'
};
};

render() {
return (
<div className="project-list module">

<div className="sectionTitle">Project I've worked on</div>

{this.props.data.map((res, i) => (
<HoverProject key={i}>
{
isHovered =>
<div className="inner-ctn">
{/* <FollowMouse /> */}
<img className={"project-image " + (isHovered ? this.sels.state : "")} src={VLEC} alt="VLEC" />
<div className="header">
<div className="number">0{res.id + 1}</div>
<div className="name">{res.nomProjet}</div>
</div>
<div className="item-ctn">
<div className="categ">{res.categProjet}</div>
<div className="roles">{res.roles}</div>
<div className="date">{res.date}</div>
</div>

</div>
}
</HoverProject>
))}
</div>
);
}
}
export default ProjectList;

我不知道如何处理其他组件,你甚至可以像这样在父组件中渲染子组件吗?

我想将 FollowMouse 的 props 作为我的 img 元素的样式属性传递。

最佳答案

我不是 100% 确定我遵循你的问题,并且我不知道你期望 this.props.children 作为函数调用时执行什么操作,但如果你想要要将 props 添加到子元素,您可以通过 React.cloneElement 执行此操作:

const ParentComponent ({children}) => (
<div>
{React.cloneElement(
React.Children.only(children), // clone the only child...
{ style: { left: xPos, top: yPos} } // ...and add new props
)}
</div>
)

给定:

<ParentComponent>
<div>Wookies and Hats</div>
</ParentComponent>

子组件将获得额外的 Prop ,相当于:

<ParentComponent>
<div style={{left: xPos, top: yPos}}>Wookies and Hats</div>
</ParentComponent>

关于javascript - 如何在同一个元素上使用多个 React 组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57830908/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com