我在页面加载时有一个react组件渲染。内容包括许多富媒体,我只想在内容出现在屏幕上时才延迟加载,然后在内容不在时将其卸载。当用户滚动时加载更多内容。
我正在使用多种技术来处理延迟加载 iframe、视频和图像,并且它在通过 React 呈现的内容之外运行良好。主要是自定义 jQuery 和Lazy Load Anything库。
我的主要问题是我无法让我的延迟加载功能触发刚刚放入 dom 的内容。一旦用户调整大小/滚动(我有一个适当触发的事件),它就会工作。如何在内容可用时触发它?
我试过从 componentDidMount 触发它,但这似乎不起作用,因为内容尚未放入 DOM 中。
我想我可以每n秒检查一次内容,但出于性能原因我想避免这种情况。
这是我的简化代码:
var EntriesList = React.createClass({
render: function() {
var entries = this.props.items.map(function(entry) {
return (
<div className="entry list-group-item" key={entry.id}>
// lazy items video, image, iframe...
<img src="1px.gif" className="lazy" datasource="/path/to/original" />
<video poster="1px.gif" data-poster-orig="/path/to/original" preload="none">{entry.sources}</video>
</div>
);
});
return(<div>{entries}</div>);
}
});
var App = React.createClass({
componentDidMount: function() {
$.get('/path/to/json', function(data) {
this.setState({entryItems: data.entries});
}.bind(this));
// What do I put here to trigger lazy load? for the rendered content?
myLazyLoad(); // does not work on the new content.
},
getInitialState: function() {
return ({
entryItems: []
});
},
render: function() {
return (<div><EntriesList items={this.state.entryItems} /></div>);
}
});
React.render(<App />, document.getElementById('entries'));