Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在选项卡中呈现react组件?_Javascript_Reactjs_Tabs_React Tabs - Fatal编程技术网

Javascript 如何在选项卡中呈现react组件?

Javascript 如何在选项卡中呈现react组件?,javascript,reactjs,tabs,react-tabs,Javascript,Reactjs,Tabs,React Tabs,在这里,如何在名为“选定行星”的选项卡中仅显示“ListSelected”组件,而在名为“Planets List”选项卡中显示其余整个组件(FetchPlanets)。如何仅在不同选项卡中呈现“ListSelected”组件,而在不同选项卡中呈现其余整个组件(“FetchPlanets”)?因此,它不应该刷新作为道具传递的选定行星 fetchplants.jsx 从“React”导入React; 从“react bootstrap”导入{ListGroup,Container}; 导入“/co

在这里,如何在名为“选定行星”的选项卡中仅显示“ListSelected”组件,而在名为“Planets List”选项卡中显示其余整个组件(FetchPlanets)。如何仅在不同选项卡中呈现“ListSelected”组件,而在不同选项卡中呈现其余整个组件(“FetchPlanets”)?因此,它不应该刷新作为道具传递的选定行星

fetchplants.jsx

从“React”导入React;
从“react bootstrap”导入{ListGroup,Container};
导入“/components.css”;
导入从“/ListSelected”中选择的列表;
导出默认类FetchReact.Component{
建造师(道具){
超级(道具);
此.state={
加载:对,
行星:空,
选定行星:[]
};
}
异步组件didmount(){
const url=“asdf”;
const res=等待获取(url);
const data=wait res.json();
this.setState({planets:data,load:false});
console.log(this.state.planets);
}
fetch=e=>{
常量数据=this.state.selectedPlanets;
data.push(例如target.innerText);
这是我的国家({
选定行星:数据
});
};
render(){
const splanets=this.state.selectedPlanets.map(函数(项){
返回
  • {item}
  • ; }); 返回( {this.state.loading | | |!this.state.plants( 加载。。。 ) : ( {this.state.planets.map((planetnames,index)=>{ 返回( { 这是fetch(e); }} className=“selectlg” > {planetnames.id} ); })} )} ); } }
    您可以使用此示例将内容分为多个选项卡:

    代码如下:

    import React, { Component } from 'react';
    import { render } from 'react-dom';
    import Tabs from "./Tabs";
    import Tab from "./Tab";
    import './style.css';
    
    class App extends Component {
    
      render() {
        return (
          <Tabs>
            <Tab value="banana" header="Banana Header">
              Banana
            </Tab>
            <Tab value="apple" header="Apple Header">
              Apple
            </Tab>
          </Tabs>
        );
      }
    }
    
    render(<App />, document.getElementById('root'));
    
    import React,{Component}来自'React';
    从'react dom'导入{render};
    从“/Tabs”导入选项卡;
    从“/Tab”导入选项卡;
    导入“/style.css”;
    类应用程序扩展组件{
    render(){
    返回(
    香蕉
    苹果
    );
    }
    }
    渲染(看起来很适合您的需要。使用起来会更方便,看看:

    import { Tab, Tabs, TabList, TabPanel } from 'react-tabs';
    import 'react-tabs/style/react-tabs.css';
    
    export default () => (
      <Tabs>
        <TabList>
          <Tab>Title 1</Tab>
          <Tab>Title 2</Tab>
        </TabList>
    
        <TabPanel>
          <h2>Any content 1</h2>
        </TabPanel>
        <TabPanel>
          <h2>Any content 2</h2>
        </TabPanel>
      </Tabs>
    );
    
    从'react Tabs'导入{Tab,Tabs,TabList,TabPanel};
    导入“react tabs/style/react tabs.css”;
    导出默认值()=>(
    标题1
    标题2
    任何内容1
    任何内容2
    );
    

    [编辑]:我想我终于得到了您想要做的事情。因此,您需要让您的父级中选定的行星能够将其作为PRP传递给您的SelectedList组件。您必须将列表设置为父级状态,如下所示:

    import React, { Component } from "react";
    import { render } from "react-dom";
    import Hello from "./Hello";
    import "./style.css";
    
    const App = () => {
      const [selectedPlanets, setSelectedPlanets] = React.useState([]);
    
      return (
        <div>
          <div className="tab-1">
            <FetchPlanets setSelectedPlanets={setSelectedPlanets} />
          </div>
          <div className="tab-2">
    
            <SelectedPlanets planets={selectedPlanets} />
            </div>
        </div>
      );
    };
    
    const FetchPlanets = ({ setSelectedPlanets }) => {
      const planets = ["Mars", "Uranus", "Earth", "Jupiter"];
    
      React.useEffect(() => {
        const selectedPlanets = [];
        planets.forEach(p => {
          if (p === "Mars" || p === "Jupiter") selectedPlanets.push(p); // Arbitrarily selected planets for the example
        });
    
        setSelectedPlanets(selectedPlanets);
      }, []);
    
      return (
        <div>
          {planets.map(p => (
          <span>{p} </span>
        ))}
        </div>
      );
    };
    
    const SelectedPlanets = ({ planets }) => (
    
      <div>
        {planets.map(p => (
          <span>{p} </span>
        ))}
      </div>
    );
    
    render(<App />, document.getElementById("root"));
    
    
    import React,{Component}来自“React”;
    从“react dom”导入{render};
    从“/Hello”导入Hello;
    导入“/style.css”;
    常量应用=()=>{
    常量[selectedPlanets,setSelectedPlanets]=React.useState([]);
    返回(
    );
    };
    const FetchPlanets=({setSelectedPlanets})=>{
    恒常行星=[“火星”、“天王星”、“地球”、“木星”];
    React.useffect(()=>{
    const selectedPlanets=[];
    行星。forEach(p=>{
    如果(p==“火星”| | p==“木星”)选择了行星。按(p);//以任意选择的行星为例
    });
    设置选定行星(选定行星);
    }, []);
    返回(
    {行星地图(p=>(
    {p}
    ))}
    );
    };
    const SelectedPlanets=({planets})=>(
    {行星地图(p=>(
    {p}
    ))}
    );
    
    渲染(

    您可以使用此示例将内容分隔为多个选项卡:

    代码如下:

    import React, { Component } from 'react';
    import { render } from 'react-dom';
    import Tabs from "./Tabs";
    import Tab from "./Tab";
    import './style.css';
    
    class App extends Component {
    
      render() {
        return (
          <Tabs>
            <Tab value="banana" header="Banana Header">
              Banana
            </Tab>
            <Tab value="apple" header="Apple Header">
              Apple
            </Tab>
          </Tabs>
        );
      }
    }
    
    render(<App />, document.getElementById('root'));
    
    import React,{Component}来自'React';
    从'react dom'导入{render};
    从“/Tabs”导入选项卡;
    从“/Tab”导入选项卡;
    导入“/style.css”;
    类应用程序扩展组件{
    render(){
    返回(
    香蕉
    苹果
    );
    }
    }
    渲染(看起来很适合您的需要。使用起来会更方便,看看:

    import { Tab, Tabs, TabList, TabPanel } from 'react-tabs';
    import 'react-tabs/style/react-tabs.css';
    
    export default () => (
      <Tabs>
        <TabList>
          <Tab>Title 1</Tab>
          <Tab>Title 2</Tab>
        </TabList>
    
        <TabPanel>
          <h2>Any content 1</h2>
        </TabPanel>
        <TabPanel>
          <h2>Any content 2</h2>
        </TabPanel>
      </Tabs>
    );
    
    从'react Tabs'导入{Tab,Tabs,TabList,TabPanel};
    导入“react tabs/style/react tabs.css”;
    导出默认值()=>(
    标题1
    标题2
    任何内容1
    任何内容2
    );
    

    [编辑]:我想我终于得到了您想要做的事情。因此,您需要让您的父级中选定的行星能够将其作为PRP传递给您的SelectedList组件。您必须将列表设置为父级状态,如下所示:

    import React, { Component } from "react";
    import { render } from "react-dom";
    import Hello from "./Hello";
    import "./style.css";
    
    const App = () => {
      const [selectedPlanets, setSelectedPlanets] = React.useState([]);
    
      return (
        <div>
          <div className="tab-1">
            <FetchPlanets setSelectedPlanets={setSelectedPlanets} />
          </div>
          <div className="tab-2">
    
            <SelectedPlanets planets={selectedPlanets} />
            </div>
        </div>
      );
    };
    
    const FetchPlanets = ({ setSelectedPlanets }) => {
      const planets = ["Mars", "Uranus", "Earth", "Jupiter"];
    
      React.useEffect(() => {
        const selectedPlanets = [];
        planets.forEach(p => {
          if (p === "Mars" || p === "Jupiter") selectedPlanets.push(p); // Arbitrarily selected planets for the example
        });
    
        setSelectedPlanets(selectedPlanets);
      }, []);
    
      return (
        <div>
          {planets.map(p => (
          <span>{p} </span>
        ))}
        </div>
      );
    };
    
    const SelectedPlanets = ({ planets }) => (
    
      <div>
        {planets.map(p => (
          <span>{p} </span>
        ))}
      </div>
    );
    
    render(<App />, document.getElementById("root"));
    
    
    import React,{Component}来自“React”;
    从“react dom”导入{render};
    从“/Hello”导入Hello;
    导入“/style.css”;
    常量应用=()=>{
    常量[selectedPlanets,setSelectedPlanets]=React.useState([]);
    返回(
    );
    };
    const FetchPlanets=({setSelectedPlanets})=>{
    恒常行星=[“火星”、“天王星”、“地球”、“木星”];
    React.useffect(()=>{
    const selectedPlanets=[];
    行星。forEach(p=>{
    如果(p==“火星”| | p==“木星”)选择了行星。按(p);//以任意选择的行星为例
    });
    设置选定行星(选定行星);
    }, []);
    返回(
    {行星地图(p=>(
    {p}
    ))}
    );
    };
    const SelectedPlanets=({planets})=>(
    {行星地图(p=>(
    {p}
    ))}
    );
    
    渲染(

    您需要制作两个不同的组件来列出行星和选定的行星。

    这就是app.js的样子

    import React from "react";
    import "./styles.css";
    import FetchPlanets from "./components/FetchPlanets";
    
    import ListSelected from "./components/ListSelected";
    
    import { Tabs, Tab } from "react-bootstrap";
    import "bootstrap/dist/css/bootstrap.min.css";
    
    export default function App() {
      const [selectedPlanet, setSelectedPlanet] = React.useState([]);
      return (
        <div className="App">
          <Tabs defaultActiveKey="planet" id="uncontrolled-tab-example">
            <Tab eventKey="planet" title="Planets">
              <FetchPlanets updatePlanets={e => setSelectedPlanet([...e])} />
            </Tab>
            <Tab eventKey="list" title="Selected">
              <ListSelected selp={selectedPlanet} />
            </Tab>
          </Tabs>
        </div>
      );
    }
    
    import React from "react";
    import { ListGroup, Container } from "react-bootstrap";
    import "./components.css";
    export default class FetchPlanets extends React.Component {
      constructor(props) {
        super(props);
        this.state = {
          loading: true,
          planets: null,
          selectedPlanets: []
        };
      }
      async componentDidMount() {
        const url = "https://assignment-machstatz.herokuapp.com/planet";
        const res = await fetch(url);
        const data = await res.json();
        this.setState({ planets: data, loading: false });
        console.log(this.state.planets);
      }
      fetch = e => {
        const data = this.state.selectedPlanets;
        if (!data.includes(e.target.innerText)) {
          data.push(e.target.innerText);
          this.setState(
            {
              selectedPlanets: data
            },
            () => {
              this.props.updatePlanets(this.state.selectedPlanets);
            }
          );
        }
      };
    
      render() {
        return (
          <Container fluid>
            {this.state.loading || !this.state.planets ? (
              <div>Loading...</div>
            ) : (
              <ListGroup>
                {this.state.planets.map((planetnames, index) => {
                  return (
                    <ListGroup.Item
                      key={index}
                      onClick={e => {
                        this.fetch(e);
                      }}
                      className="selectlg"
                    >
                      {planetnames.id}
                    </ListGroup.Item>
                  );
                })}
              </ListGroup>
            )}
          </Container>
        );
      }
    }
    
    从“React”导入React;
    导入“/styles.css”;
    从“/components/FetchPlanets”导入FetchPlanets;
    导入从“/components/ListSelected”中选择的列表;
    从“react bootstrap”导入{Tabs,Tab};
    导入“bootstrap/dist/css/bootstrap.min.css”;
    导出默认函数App(){
    const[selectedPlanet,setSelectedPlanet]=React.useState([]);
    返回(
    设置选定计划