Javascript 将道具传递给同一组件的所有实例
在我的React应用程序中,我通过将aJavascript 将道具传递给同一组件的所有实例,javascript,reactjs,Javascript,Reactjs,在我的React应用程序中,我通过将achangeView方法作为道具从父级传递到菜单,根据在菜单组件中单击的按钮有条件地呈现视图。当前视图作为状态存储在父零部件中 我还想使用相同的changeView方法来控制每个条件渲染视图中的按钮,以便在单击时返回菜单 我目前正在实现这一目标,因此: render() { let view; switch(this.state.view) { case 0: view = (<Menu changeView={this.c
changeView
方法作为道具从父级传递到菜单,根据在菜单组件中单击的按钮有条件地呈现视图。当前视图作为状态存储在父零部件中
我还想使用相同的changeView
方法来控制每个条件渲染视图中的按钮,以便在单击时返回菜单
我目前正在实现这一目标,因此:
render() {
let view;
switch(this.state.view) {
case 0:
view = (<Menu changeView={this.changeView} />);
break;
case 1:
view = (<View changeView={this.changeView}>Test 1</View>);
break;
case 2:
view = (<View changeView={this.changeView}>Test 2</View>);
break;
default:
view = (<View changeView={this.changeView}>An error has ocurred!</View>);
}
return (
<div>
{view}
</div>
);
}
render(){
让我们看看;
开关(this.state.view){
案例0:
视图=();
打破
案例1:
视图=(测试1);
打破
案例2:
视图=(测试2);
打破
违约:
视图=(出现错误!);
}
返回(
{view}
);
}
如您所见,我必须将
changeView
方法分别传递给View
组件的每个实例。有没有办法设置视图
组件,使每个实例都被传递更改视图
属性,而不必每次都显式声明它?尝试在视图组件内移动switch语句
render() {
return (
<div>
{this.state.view === 0 && <Menu changeView={this.changeView} />}
{this.state.view > 0 && <View changeView={this.changeView}>
{() => {
switch (this.state.view) {
case 1:
return 'Test 1';
case 2:
return 'Test 2';
default:
return 'An error has ocurred!';
}
}}
</View>
</div>
);
}
render(){
返回(
{this.state.view==0&&}
{this.state.view>0&&
{() => {
开关(this.state.view){
案例1:
返回“测试1”;
案例2:
返回“测试2”;
违约:
返回“出现错误!”;
}
}}
);
}
尝试将switch语句移动到视图组件中
render() {
return (
<div>
{this.state.view === 0 && <Menu changeView={this.changeView} />}
{this.state.view > 0 && <View changeView={this.changeView}>
{() => {
switch (this.state.view) {
case 1:
return 'Test 1';
case 2:
return 'Test 2';
default:
return 'An error has ocurred!';
}
}}
</View>
</div>
);
}
render(){
返回(
{this.state.view==0&&}
{this.state.view>0&&
{() => {
开关(this.state.view){
案例1:
返回“测试1”;
案例2:
返回“测试2”;
违约:
返回“出现错误!”;
}
}}
);
}
如果需要,您可以将开关更改为仅更改副本和组件
render() {
let copy = "";
let Component = View;
switch (this.state.view) {
case 0:
Component = Menu;
break;
case 1:
copy = "Test 1";
break;
case 2:
copy = "Test 2";
break;
default:
copy = "An error has ocurred!";
}
return (
<div>
<Component changeView={this.changeView}>{copy}</Component>
</div>
);
}
render(){
让我们复制=”;
让组件=视图;
开关(this.state.view){
案例0:
组件=菜单;
打破
案例1:
copy=“测试1”;
打破
案例2:
copy=“测试2”;
打破
违约:
copy=“出现错误!”;
}
返回(
{copy}
);
}
如果需要,您可以将开关更改为仅更改副本和组件
render() {
let copy = "";
let Component = View;
switch (this.state.view) {
case 0:
Component = Menu;
break;
case 1:
copy = "Test 1";
break;
case 2:
copy = "Test 2";
break;
default:
copy = "An error has ocurred!";
}
return (
<div>
<Component changeView={this.changeView}>{copy}</Component>
</div>
);
}
render(){
让我们复制=”;
让组件=视图;
开关(this.state.view){
案例0:
组件=菜单;
打破
案例1:
copy=“测试1”;
打破
案例2:
copy=“测试2”;
打破
违约:
copy=“出现错误!”;
}
返回(
{copy}
);
}
您所需要的只是视图中不断变化的文本。将文本移动到组件外部的数组中,然后按视图索引选择文本或返回到错误:
const text = ['', 'Test 1', 'Test 2'];
class Demo extends React.Component {
state = {
view: 1
}
render() {
const { view } = this.state;
const text = text[view] || 'An error has ocurred!';
return (
<div>
{view === 0 ?
<Menu changeView={this.changeView} />
:
<View changeView={this.changeView}>{text}</View>
}
</div>
);
}
}
const text=['','测试1','测试2'];
类Demo扩展了React.Component{
状态={
视图:1
}
render(){
const{view}=this.state;
const text=text[view]| |“出现错误!”;
返回(
{view==0?
:
{text}
}
);
}
}
您所需要的只是视图中不断变化的文本。将文本移动到组件外部的数组中,然后按视图索引选择文本或返回到错误:
const text = ['', 'Test 1', 'Test 2'];
class Demo extends React.Component {
state = {
view: 1
}
render() {
const { view } = this.state;
const text = text[view] || 'An error has ocurred!';
return (
<div>
{view === 0 ?
<Menu changeView={this.changeView} />
:
<View changeView={this.changeView}>{text}</View>
}
</div>
);
}
}
const text=['','测试1','测试2'];
类Demo扩展了React.Component{
状态={
视图:1
}
render(){
const{view}=this.state;
const text=text[view]| |“出现错误!”;
返回(
{view==0?
:
{text}
}
);
}
}
您可以创建一个函数来为您执行此操作
getView(Component, children){
return <Component changeView = {this.changeView}>{children}</Component>
}
render() {
let view;
switch(this.state.view) {
case 0:
view = getView(Menu)
break;
case 1:
view = getView(View,'Test 1')
break;
case 2:
view = getView(View,'Test 2')
break;
default:
view = getView(View,'An error has ocurred!');
}
return (
<div>
{view}
</div>
);
}
getView(组件、子组件){
返回{children}
}
render(){
让我们看看;
开关(this.state.view){
案例0:
视图=获取视图(菜单)
打破
案例1:
view=getView(视图,“测试1”)
打破
案例2:
视图=获取视图(视图,“测试2”)
打破
违约:
view=getView(视图,“出现错误!”);
}
返回(
{view}
);
}
您可以创建一个函数来为您执行此操作
getView(Component, children){
return <Component changeView = {this.changeView}>{children}</Component>
}
render() {
let view;
switch(this.state.view) {
case 0:
view = getView(Menu)
break;
case 1:
view = getView(View,'Test 1')
break;
case 2:
view = getView(View,'Test 2')
break;
default:
view = getView(View,'An error has ocurred!');
}
return (
<div>
{view}
</div>
);
}
getView(组件、子组件){
返回{children}
}
render(){
让我们看看;
开关(this.state.view){
案例0:
视图=获取视图(菜单)
打破
案例1:
view=getView(视图,“测试1”)
打破
案例2:
视图=获取视图(视图,“测试2”)
打破
违约:
view=getView(视图,“出现错误!”);
}
返回(
{view}
);
}
对于案例0组件是菜单
非查看
@dotconnor谢谢你的帮助。我认为Thole的答案更优雅。对于案例0组件是菜单
非查看
@dotconnor谢谢你的帮助。我认为Thole的答案更优雅。这很完美。谢谢!这很完美。谢谢!