我绝对不是React的新手,需要创建一个按钮来将用户从当前组件(MovieView
)转到主要组件(MainView)
。我设法正确地创建了它, onClick
触发MainView
的显示,我知道我无法从函数中调用类(如控制台所说),因此我创建了另一个要调用的函数并触发MainView
。但您可能想知道,它不起作用,这是我正在使用的代码:
import React from 'react';
import { MainView } from '../main-view/main-view';
function NewButton() {
return <MainView />;
}
export class MovieView extends React.Component {
constructor() {
super();
this.state = {};
}
render() {
const { movie } = this.props;
if (!movie) return null;
return (
<div className="movie-view">
<img className="movie-poster" src={movie.imagePath} />
<div className="movie-title">
<span className="label">Title: </span>
<span className="value">{movie.title}</span>
</div>
<div className="movie-description">
<span className="label">Description: </span>
<span className="value">{movie.plot}</span>
</div>
<div className="movie-genre">
<span className="label">Genre: </span>
<span className="value">{movie.genre.name}</span>
</div>
<div className="movie-director">
<span className="label">Director: </span>
<span className="value">{movie.director.name}</span>
</div>
<div className="back-movies">
<button onClick={NewButton}>Back</button>
</div>
</div>
);
}
}
您能看到这一点为您指出要走的路,还是我如何正确地称呼此MainView
类。我知道这是一个简单的任务,但是我恐怕还没有吸收React原理。预先感谢大家。
答案 0 :(得分:1)
在不引入其他依赖关系的情况下,此示例最简单的方法可能是使用状态来跟踪是否单击了按钮。如果已单击,则渲染MovieView
,如果未渲染MainView
。
为此,您需要执行以下操作:
MainView
事件中应呈现的onClick
。 (布尔值可能就足够了)render()
中:
MovieView
的内容。MainView
组件。实施细节留作练习:)
如果您已经在使用路由器(例如react-router
),则可以将其更新为链接到MainView
组件的URL。
答案 1 :(得分:0)
我将类改为功能组件,并像这样实现它:-)
- name: Ensure json file exists
copy:
content: "{}"
dest: /tmp/var.json
force: false
答案 2 :(得分:0)
如果您需要基于响应中的用户操作添加或删除组件或显示新视图,则需要通过state进行操作。
import React from 'react';
import { MainView } from '../main-view/main-view';
export class MovieView extends React.Component {
constructor() {
super();
this.state = {
showMainView: false;
};
}
toggleMainView = () => this.setState(prevState => ({ showMainView:
!prevState.showMainView}))
render() {
const { movie } = this.props;
const { showMainView } = this.state;
if (!movie) return null;
return (
<div className="movie-view">
<img className="movie-poster" src={movie.imagePath} />
<div className="movie-title">
<span className="label">Title: </span>
<span className="value">{movie.title}</span>
</div>
<div className="movie-description">
<span className="label">Description: </span>
<span className="value">{movie.plot}</span>
</div>
<div className="movie-genre">
<span className="label">Genre: </span>
<span className="value">{movie.genre.name}</span>
</div>
<div className="movie-director">
<span className="label">Director: </span>
<span className="value">{movie.director.name}</span>
</div>
<div className="back-movies">
<button onClick={this.toggleMainView}>Back</button>
</div>
// render the mainView based on the state
{ showMainView && <MainView />}
</div>
);
}
}
答案 3 :(得分:0)
我找到了一个解决方案,我在这里无法获得帮助。我首先在这里粘贴了一些代码,但是,我认为给出完整答案可能会有所帮助。
因此,我在这里提出的问题是关于一个名为<MovieView
的组件,该组件是与另一个名为MainView
的组件(在另一个文件中)交互的应用程序的一部分。
解决方案是在onClick
的实时14上插入方法<MovieView>
和第39行的按钮,您可以看到at this file on Github。如果文件已更新,请检查11月22日的版本。
但是,已经在主要组件<MainView>
中找到了解决方案,并在第48和49行添加了代码。这是文件的链接:https://github.com/cgobbet/react-client/blob/master/src/components/main-view/main-view.jsx
包含整个应用程序的存储库在此页面上:https://github.com/cgobbet/react-client。
对审稿人表示抱歉(我不小心删除了@ nick-miller提交的出色答案的一部分。