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

反应:未捕获的类型父母和孩子之间的错误

齐高寒
2023-03-14

我已经将组件拆分为父元素和子元素。我通过状态将数据从父级传递给子级,但收到未捕获的类型错误:无法读取属性'ImageSource'的空,这是奇怪的,因为我遵循与应用程序的另一个元素相同的过程。我也按照组件和道具留档,但仍然有点难倒。

如果我已经定义了状态,设置了状态,并将其作为属性添加到子级,为什么状态仍然为null?

class Parent extends React.Component {

 constructor(){
   super();
   this.state = {
     imageSource: [],
     imageTitles: [],
   }
 }

 componentDidMount(){

 ...
 ...
 // grabbing stuff from Dropbox API
 ...
 ...

  .then(function(){
    that.setState({

      imageSource: sources,
      imageTitles: titles,

    });
   });



 render(){
   return(
      <Child imageSource={this.state.imageSource} imageTitles=
      {this.state.imageTitles} />
   );
 }
}



class Child extends React.Component{

 render(){
    if(!this.state.imageSource.length)
      return null;

      let titles = this.state.imageTitles.map((el, i) => <p>{el}</p>)

      let images = this.state.imageSource.map((el, i) =>

        <div className="imageContainer">
           <img key={i} className='images' src={el}/>
           <div className="imageTitle">{titles[i]}</div>
        </div>
       )

    return (
      <div className="ChildWrapper">
         {images}
      </div>
    );
  }
}

共有2个答案

公西财
2023-03-14

有两件事很突出。下面是一段代码:

class Child extends React.Component{

 render(){
    if(!this.state.imageSource.length)
      return null;

错误,因为您的子组件没有状态。您没有在子组件中声明任何状态,您可能不应该这样做。它所拥有的是从父组件传下来的道具。这是学习的关键部分。您想在此处检查的是如果(!this.props.imageSource.length)并编辑调用this.state并替换为this.props的附加代码。

我注意到的另一件事是:

 that.setState({

      imageSource: sources,
      imageTitles: titles,

    });

为什么that.set状态?这很令人困惑,你真的没有理由称之为。它应该总是this.setState({...})如果您正在对this进行一些重新绑定,您就做错了,因为这种情况不应该发生,而且很容易导致错误。

楚俊逸
2023-03-14

在子元素中,您将收到作为道具的变量(而不是状态)。

在你的情况下这个代码应该工作

if(!this.props.imageSource.length)
  return null;

  let titles = this.props.imageTitles.map((el, i) => <p>{el}</p>)

  let images = this.props.imageSource.map((el, i) =>

    <div className="imageContainer">
       <img key={i} className='images' src={el}/>
       <div className="imageTitle">{titles[i]}</div>
    </div>
   )

看看这个问题,我想它会帮助你理解不同之处。

在React中,状态和道具有什么区别?

 类似资料:
  • 我正在做一个物理模拟。 我有一个,它保存模拟中的所有对象。我有一个父类:,还有两个子类:和。 当然,父类没有方法,但每个子类都有。因此,当我在列表中循环绘制每个元素时,它不允许我这样做,因为类中没有方法(因为我将列表定义为

  • 问题内容: 是否有一种方法可以在不知情的情况下(或通常在CSS3中)访问父级? 就像是: 较小的变量将是显而易见的方法,但是在这种情况下,我只是不知道父级的变量,因为它可以动态设置样式。 有人在她的把戏盒子里帮忙吗? 问题答案: 编辑:看看ScottS的答案吧,这可能是您需要的一个聪明的解决方案。 这不可能在纯CSS中完成。原因是这些类型的引用可能导致“循环”情况。或者在DOM必须多次循环以确定最

  • 问题内容: 我在这里有一个简单的设置: 我有一个父组件,该父组件有2个子组件。在第一个子组件中:用户更改输入的值。然后,该更改的值将是我想要从该孩子传递给父对象的道具,以便可以将其传递给与同一父组件相连的另一个孩子。 当前设置的这个,请查看 从用户输入到UI更改的流程:1.在“ Child 1”中:调整一个滑块,将onChange值传递给父组件;2.将此属性(新的滑块值)传递给Parent组件,以

  • 我一直在将代码从JIT转换到D3,并使用树布局。我已从中复制了代码http://mbostock.github.com/d3/talk/20111018/tree.html使用我的树数据,但我想做更多。 在我的例子中,我想创建子节点,这些子节点合并回一个较低级别的父节点,我意识到这更像是一个有向图结构,但是希望树能够适应这一点(即注意子节点之间的公共id应该合并)。 因此,基本上,一棵树在从父母到

  • 问题内容: 早上好, 我在工作中继承了一些旧代码,并且使用的是一种非常不寻常的设计模式。我在论坛上唯一可以找到的类似模式的参考资料是在这里。情况是原始设计者有一个泛型父类(不是抽象类),该类具有静态工厂方法,该方法直接引用子类。 这是这种编码样式的示例,可在旧版代码的多个地方找到: 其中Log4JLoggerFactory和LogBackLoggerFactory扩展了LoggerFactory。

  • 问题内容: 最初,我一直在尝试获取父母的名单以及每个父母的一个最近的孩子。我已经知道如何使用以下查询 但是问题是,结果不包括没有孩子的父母。添加也无济于事。所以我想我可以对所有没有孩子的父母进行查询,然后将这两个查询合并为一个查询。但是我在建立这样的查询时遇到了麻烦。将不胜感激任何建议。 问题答案: 这是您的查询: