我已经将组件拆分为父元素和子元素。我通过状态将数据从父级传递给子级,但收到未捕获的类型错误:无法读取属性'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>
);
}
}
有两件事很突出。下面是一段代码:
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
进行一些重新绑定,您就做错了,因为这种情况不应该发生,而且很容易导致错误。
在子元素中,您将收到作为道具的变量(而不是状态)。
在你的情况下这个代码应该工作
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。
问题内容: 最初,我一直在尝试获取父母的名单以及每个父母的一个最近的孩子。我已经知道如何使用以下查询 但是问题是,结果不包括没有孩子的父母。添加也无济于事。所以我想我可以对所有没有孩子的父母进行查询,然后将这两个查询合并为一个查询。但是我在建立这样的查询时遇到了麻烦。将不胜感激任何建议。 问题答案: 这是您的查询: