在 React.js 中:是否可以只访问子组件的一部分?

巴比迪

故事是这样的:我已经在一家公司实习了 3 个半星期(在我第一年的编程学习结束时),我的任务是将自动翻译集成到他们的 React Web 应用程序中,以便它只翻译一些文本(显然,我们不希望翻译名称或产品名称)。

我的问题不是翻译部分,我已经开发了一个可以使用的功能性 REST API。我遇到的问题是我无法找到一种方法来仅从其父级访问子组件的标记部分。我设法在 vanilla js 和简单的 HTML 中使用 document.getElementsByClassName 简单地做到了,但在 React 中没有。

这是我想应用的原则的一个简单示例:

这是包含应用程序原始文本的组件(您会注意到我计划将翻译器组件称为包装器以访问其子项的内容)。

import React from "react";
import {Translator} from "./Translator.js";

export class Content1 extends React.Component {
  content = (
    <div>
      <p> Hey! Regarde cet article, il a l'air top! </p>
      <p className="translate">
        Hippolyte Romain, né le 28 août 1947 à Paris, est un illustrateur,
        peintre et écrivain français. Il travaille d'abord dans les milieux de
        la mode et de la couture, se spécialisé dans la connaissance du xviiie
        siècle, et sa vie et son travail se partagent entre la France et la
        Chine. Il est le directeur artistique du jardin d'acclimatation de
        Paris.
      </p>
      <p className="translate"> Tu me diras ce que tu en penses! </p>
    </div>
  );

  render() {
    return (
      <Translator>
         {this.content}
      </Translator>
    );
  }
}

在 Translator 内部,我想到了使用这样的东西:

import React from "react";

export class Translator extends React.Component {
  originalContent = this.props.children

  arrayToTranslate = originalContent.getElementsByClassName('translate')

  // Here would be all the translating stuff and return arrayToTranslate with translated 
  text inside
  
  for(let i = 0; i < originalContent.getElementsByClassName('translate').length; i++) {
     originalContent.getElementsByClassName('translate')[i] = arrayToTranslate[i]
  }

  render() {
    return (
      {originalContent}
    );
  }
}

我知道 getElementsByClassName 仅存在于“文档”DOM 元素中,只是为了让您了解我想如何做。不幸的是,我找不到任何方法让它工作。

最后一点注意:这个想法是在我们需要翻译的尽可能多的潜在内容组件上调用我的翻译器组件,以便翻译是一种“模块化”。

对不起,如果我没有说清楚,或者这是一个有明显答案的愚蠢问题。我必须在 3 天内从头开始学习 React 才能开始制作它,而且我可能错过了很多可能非常有用的东西。

提前感谢您的回答!如果某些部分不清楚,请告诉我。

迪伦董

也许你可以试试这个方法。

export default class Translator extends React.Component {
  componentDidMount() {
    this.translator()
  }
  componentDidUpdate() {
    this.translator()
  }
  translator() {
    const arr = document.getElementsByClassName('translate')
    // this is what you need
    console.log(arr)
  }
  render() {
    // children can be content or any React Component
    return this.props.children
  }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

通过react JS中的函数渲染组件的一部分

是否可以使用香草JavaScript而不是react.js来呈现网站的一部分?

React.js在悬停问题上显示组件的一部分

从子级更改父级的一部分 - React.js

如何下载 React 组件的一部分?

组件中仅呈现了一部分更新状态(React / Redux)

如何修复Youtube Data API v3必需参数:Axios请求和React.js中的一部分

单击时如何创建边框字符串的一部分:React.js

React.js 当 scrollTop 为 0 时,检测我们在第一部分,使用 react-full-page npm

在Vue.js中返回组件的输出作为方法的HTML响应的一部分

React-Router Redirect仅渲染组件的一部分

React在组件内部使prop的一部分变为粗体

如何用React组件多次替换字符串的一部分?

将一部分状态传递给 React 组件

如何从Web应用程序插件的一部分Servlet中访问.js文件?

Vue.js使用计算属性显示或隐藏组件的一部分

访问react-chartjs饼图的一部分

js中的fetch()(react hooks)-那么我可以在第三部分访问数据吗?

React/Axios - 显示 URL 的一部分

Knex.js 子选择“in”子句作为连接的一部分

如果仅更改组件的一部分,React会渲染该组件吗?

使用react-native的React-navigation:如果组件的一部分不呈现DrawerIcon

如何在React中为正文文本的一部分添加样式

如何在 CSS/React 中隐藏 div 的一部分?

如何在React Native的TextInput中为文本的一部分应用样式?

如何在React Native中弄脏视图的一部分?

我如何在React Native中剪切视图的一部分

难以在React中显示json响应的一部分

如何在React中实时删除HTML的一部分