我是ReactJS的新手...
我有一个具有以下类组件结构的项目:
index.js
--app
--chat
--header
--left
--right
在chat.js组件中,我使用api进行了google搜索,以根据特定的关键字检索图像...我的直观解决方案是:
this.client.search("cars")
.then(images => {
for(let el of images) {
ReactDOM.render(<img src="{{el.url}}" syle="{{width: '100%'}}" />, document.querySelector('#gimages'));
}
});
对吗?还是我可以使用带有通量(redux)的存储状态的组件?
答案 0 :(得分:1)
也许更简单的常规使用react可以满足您的需求?
您可以遵循与以下所示类似的模式,以更“类似于反应”的方式实现所需的条件:
class Chat extends React.Component {
constructor(props) {
super(props)
this.state = { images : [] } // Set the inital state and state
// model of YourComponent
}
componentDidMount() {
// Assume "client" has been setup already, in your component
this.client.search("cars")
.then(images => {
// When a search query returns images, store those in the
// YourComponent state. This will trigger react to re-render
// the component
this.setState({ images : images })
});
}
render() {
const { images } = this.state
// Render images out based on current state (ie either empty list,
// no images, or populated list to show images)
return (<div>
{
images.map(image => {
return <img src={image.url} style="width:100%" />
})
}
</div>)
}
}
请注意,这不是完整的代码示例,将需要您“填补空白”以使用当前聊天组件中的所有其他内容(例如,设置this.client
)
答案 1 :(得分:1)
这不是您应该采取的方式,您无需为每个项目使用ReactDOM.render
。实际上,您根本不需要使用ReactDOM.render
。在组件中,您可以使用生命周期方法来获取数据,然后将其设置为本地状态。获取数据后,您可以将其传递到单个组件或直接在render
方法中呈现。
class Chat extends React.Component {
state = {
images: [],
}
componentDidMount() {
this.client.search( "cars" )
.then( images => this.setState( { images } ) );
}
renderImages = () =>
this.state.images.map( image => <Image key={image.id} image={image} /> );
render() {
return (
<div>{this.renderImages()}</div>
);
}
}
const Image = props => (
<div>
<img src={props.image.url} syle="{{width: '100%'}}" />
</div>
);
此时,您不需要Redux或其他任何东西。但是,如果您需要打开许多组件的状态,则可以考虑使用。另外,习惯使用map
,filter
之类的方法来代替for循环。