当前位置: 首页 > 知识库问答 >
问题:

有什么理由不将react组件作为属性传递吗?

乐健
2023-03-14

假设我们有一个名为ThreeModule的react组件,它非常聪明地在一行中显示了三个Arbityle react组件(甚至只是任意定义的dom元素)。

我们可以通过将react元素设置为状态元素并将它们作为属性传入来实现这一点,如下面的答案所建议的:

class ModA extends React.Component{
  render () {
    return <div> this is ModA</div>
  }
}

class ModB extends React.Component{
  render () {
    return <div> this is ModB</div>
  }
}
class ModC extends React.Component{
  render () {
    return <div> this is ModC</div>
  }
}

class ThreeMod extends React.Component{

  render() {
  return (<div className = "ThreeMod"> 
    This is ThreeMod
    <div className ="left">   
      {this.props.moda}
    </div> 

    <div  className ="middle"> 
     {this.props.modb}
    </div> 

    <div  className ="right"> 
      {this.props.modc}
    </div> 

  </div> ); 

  }
}

class App extends React.Component {


  constructor() {

    super(); 
    this.state = {
      moda: <ModA/> ,
      modb: <ModB/> ,
      modc: <ModC/> 
    }
  }

  render() {
    function getRandomMod() {
      let rand =Math.floor(Math.random() * Math.floor(4));
      switch (rand) {
        case 0 : return <ModA/> 
        case 1: return <ModB/> 
        case 2: return <ModC/> 
        default: return "random text"; 
      }        
    }

    return (
      <div className="App">
        This is App

        <button onClick = {() => {
          this.setState({moda: getRandomMod() }
          )}}>randomise left </button> 

        <button onClick = {() => {
          this.setState({modb: getRandomMod() }
        )}}>randomise middle  </button> 

        <button onClick = {() => {
          this.setState({modc: getRandomMod() }
        )}}>randomise right</button> 

        <ThreeMod
          moda={this.state.moda}
          modb={this.state.modb}
          modc={this.state.modc}
          /> 
      </div>
    );
  }
}

ReactDOM.render(<App />,   document.body
);
div {
  border: solid 1px black; 
  padding: 0.2em;
}

.ThreeMod {
  display:flex; 
  flex-flow: row; 
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>


<div id = "react"/> 

这恰恰适用于我想做的事情--我想知道的是--这是不是做事情的错误方式?有没有理由(如表现)不这样做事?

共有1个答案

盛超
2023-03-14

我个人不使用这种方法,但是PropTypes文档中元素(“一个React元素”)和节点(“任何可以呈现的内容”)的存在表明它具有受支持的功能。

 类似资料:
  • 问题内容: 可以说我有: 在Tabs组件内部,具有属性 儿童[0](this.props.children)看起来像 儿童[0]。道具看起来像 最终,Children对象看起来像(这是我想要传递的): 问题是这样,如果我这样重写MultiTab 在选项卡组件内部 看起来和上面一样。 好像 我希望该物业看起来像。上面只是打印出Statement函数。 这是一个很奇怪的问题,但是长话短说,我正在使用一

  • 英文原文:http://emberjs.com/guides/components/passing-properties-to-a-component/ 默认情况下,组件不能访问模板作用域下的属性。 例如,假设有一个用于显示一篇博客的blog-post组件: 1 2 3 4 <script type="text/x-handlebars" id="components/blog-post">

  • 我正在使用react语义ui模态对象。打开模态的对象是一个道具。 我想在另一个组件中嵌入模态: 如何传递JSX代码(

  • 我试图将一个useState函数传递给另一个prop,但我得到以下错误:未捕获范围错误:超出了最大调用堆栈大小 我在子组件中添加了useState函数作为按钮单击的句柄事件,并且假设该错误意味着它在循环中被调用?任何人都可以帮助我理解这里的问题吗?代码如下: 子组件(Inputfields.js):

  • 在呈现组件时,我得到以下警告: 我想我的组件应该完全像托管输入字段那样工作,没有任何问题: 是初始值 回调更新中的道具 使用新道具呈现组件

  • 问题内容: 大多数情况下,文件上传错误的根源是我们忘记了在HTML表单中添加属性。 通常,我们不需要为常规请求添加该属性。但是,在上传文件时,我们确实需要将其添加到HTML表单中, 我很好奇,如果没有该属性,为什么上传文件不起作用? 问题答案: “ multipart / form-data”编码类型由RFC1867指定,您可以在此处查看有关技术概述的更多信息。 在HTML表单中,数据表示为几个字