【发布时间】:2017-07-15 15:20:28
【问题描述】:
我是 React 新手,我还在学习它。我正在用它做一个个人项目。
让我解释一下我的问题:
我有一个名为 <NewReleases /> 的组件,我在其中进行了 ajax 调用并获取了一些关于今天在电影院上映的一些电影的数据。 (我取标题、海报图片、概述等...)我将所有数据放在<NewReleases /> 状态中,这样状态就变成了一个对象,其中包含每部电影的对象,每个对象都包含标题属性、海报属性等...然后我渲染组件,使它看起来像一个由电影海报、信息等组成的网格。这很好用。
然后我需要一个组件<Movie /> 来从<NewReleases /> 的状态中获取一些数据并将它们呈现在HTML 上。我阅读了人们遇到类似问题的其他问题,但情况不同,因为他们有一个由父组件呈现的子组件。这样,人们建议将状态作为道具传递。我不能这样做,因为我的<Movie /> 组件不是由<NewReleases /> 呈现的。 <NewReleases /> 进行 ajax 调用并仅根据检索到的数据呈现 JSX 网格。
在index.js 我已经这样设置了主页:
import React from 'react';
import ReactDOM from 'react-dom';
import {BrowserRouter, Switch, Route} from 'react-router-dom';
import {Home} from './home';
import {Movie} from './movie';
import './css/index.css';
class App extends React.Component {
render() {
return(
<BrowserRouter>
<Switch>
<Route path={'/movie/:movieTitle'} component={Movie} />
<Route path={'/'} component={Home} />
</Switch>
</BrowserRouter>
);
}
}
ReactDOM.render(
<App />,
document.getElementById('root')
);
(您在这里看不到<NewReleases />,因为它在<Home /> 组件内部呈现,该组件还呈现页眉和页脚。)
所以当我点击<NewReleases /> 渲染的电影时,应用程序会让我继续localhost:3000/movie/:movieTitle 其中 :movieTitle 是一种动态的方式来表示电影的标题(例如,如果我点击星球大战由<NewReleases /> 渲染,我会继续localhost:3000/movie/StarWars)。在该页面上,我想显示有关该电影的详细信息。信息存储在<NewReleases /> 状态,但我无法从<Movie /> 访问该状态(我猜)。
我希望你得到了我想要实现的目标。我不知道这是否可能。我有一个想法:在<Movie /> 上,我可以为我想要的电影再做一次 ajax 调用,但我认为它会更慢,而且我认为这不是 React 的一个好的解决方案。
请注意,我没有使用 Redux、Flux 等……只有 React。我想在转向其他技术之前很好地了解 React。
【问题讨论】:
-
如果您希望您的数据在全球范围内可用,请在客户端使用
localStorage或在服务器端使用Database。 (保持简单) -
不,你不能。您将不得不使用一些肮脏的技巧。这就是我讨厌反应的原因。
标签: javascript ajax reactjs components react-jsx