reactjs - ReactJS - 如何从父级创建动态引用。child 是一个功能组件
问题描述
这是孩子:
import React from 'react';
const Hero = (props) => (
<div ref={props.heroRef} className={`hero-region ${props.class}`}>
<h3>{props.copy}</h3>
</div>
);
export default Hero;
这是父母:
import React, { Component, Fragment } from "react";
import Hero from "./../components/content/Hero";
export default class HomePage extends Component {
render() {
const createHeroNodes = () =>
[
{ class: "light", copy: "first div" },
{ class: "dark", copy: "second div" }
].map((hero, i) => (
<Hero
heroRef={el => (this[`${heroRegion}${i}`] = el)}
class={hero.class}
copy={hero.copy}
/>
));
return <Fragment>{createHeroNodes()}</Fragment>;
}
}
我希望它能够创建像 this.heroRegion1 和 this.heroRegion2 这样可访问的子引用,这样我就可以在滚动时做一些命令式动画。
我得到的是一个错误:'heroRegion 未定义'
有任何想法吗?我试图避免将 this.heroRegion1 硬编码为 this.heroRegion(...n)。
解决方案
通过${heroRegion}
在模板文字中写入,您试图访问一个heroRegion
不存在的变量。
您可以heroRegion${i}
改为编写它,它会按预期工作。
例子
const Hero = props => (
<div ref={props.heroRef} className={`hero-region ${props.class}`}>
<h3>{props.copy}</h3>
</div>
);
class HomePage extends React.Component {
componentDidMount() {
console.log(this.heroRegion0, this.heroRegion1);
}
render() {
return (
<React.Fragment>
{[
{ class: "light", copy: "first div" },
{ class: "dark", copy: "second div" }
].map((hero, i) => (
<Hero
heroRef={el => (this[`heroRegion${i}`] = el)}
class={hero.class}
copy={hero.copy}
/>
))}
</React.Fragment>
);
}
}
ReactDOM.render(<HomePage />, document.getElementById("root"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id="root"></div>
推荐阅读
- visual-c++ - 我在运行一个简单的 c++ 程序时遇到问题。其他程序可能会有效运行(我只尝试过 C)
- azure-ad-b2c - Azure AD B2C:在本地帐户注册期间持续声明
- c# - “BCrypt”不包含“验证”的定义
- node.js - 具有 Nodejs 运行时的 Google Cloud 功能不适用于 CORS 和异步
- pandas - 如何将数据框转换为浮点类型?
- jmeter - HTTP请求默认值与单个采样器中的JMeter嵌入式资源
- c++ - 非虚拟键的 WM_KEYUP (windows.h WindowProc)
- ios - Flutter IOS BackgroundHandler不工作
- c# - UWP 和 WinForm 桌面桥
- python - 如何找到第二个最低有效位数等给定和整数?