Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.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_Components_React Component - Fatal编程技术网

Javascript React-单击位于组件外部的按钮后重新启动组件

Javascript React-单击位于组件外部的按钮后重新启动组件,javascript,reactjs,components,react-component,Javascript,Reactjs,Components,React Component,我有一个index.js文件,在那里我渲染了App组件 Index.js文件 ReactDOM.render(<App />, document.getElementById('root')); 下面是App.js文件的代码,其中包含App组件 const Hello = () => (<p>Hello</p>) App.js文件 const handleClick = () => { ReactDOM.render(<Setting

我有一个
index.js
文件,在那里我渲染了
App
组件

Index.js文件

ReactDOM.render(<App />, document.getElementById('root'));
下面是
App.js
文件的代码,其中包含
App
组件

const Hello = () => (<p>Hello</p>)
App.js文件

const handleClick = () => {
  ReactDOM.render(<SettingContainer value="10" />, document.getElementById('divHello'));
};

const App = () => {
  return (
    <>
      <div id="divHello">
        <SettingContainer value="10" />
      </div>
      <button onClick={handleClick}>Button</button>
    </>
  );
};

export default App;
consthandleclick=()=>{
render(,document.getElementById('divHello');
};
常量应用=()=>{
返回(
按钮
);
};
导出默认应用程序;

事实上,你的问题又回到了你的心态上,你应该改变你的想法。您应该有一个
索引
容器,如下所示:

const Index = () => {
  const [isRender, renderSettingContainer] = useState(false);

  return (
    <>
      {isRender && (
        <SettingContainer />
      )}
      <App onClick={renderSettingContainer}>
    </>;
  );
};
const App = ({ onClick }) => (
  <>
    Hello Friends
    <div id="divHello">

    </div>
    <button onClick={onClick}>Button</button>
    </>
  );
ReactDOM.render(<Index />, document.getElementById('root'));
此外,无需使用
ReactDOM
两次,因此请按如下方式编写:

const Index = () => {
  const [isRender, renderSettingContainer] = useState(false);

  return (
    <>
      {isRender && (
        <SettingContainer />
      )}
      <App onClick={renderSettingContainer}>
    </>;
  );
};
const App = ({ onClick }) => (
  <>
    Hello Friends
    <div id="divHello">

    </div>
    <button onClick={onClick}>Button</button>
    </>
  );
ReactDOM.render(<Index />, document.getElementById('root'));
ReactDOM.render(,document.getElementById('root');
如果您有任何问题,请写一条评论,我肯定会回答并更改我的答案


提示:基于丹·阿布拉莫夫的想法,
就像
,代码更少,性能更好。

事实上,你的问题又回到了你的心态,你应该改变你对ReactJS的想法。您应该有一个
索引
容器,如下所示:

const Index = () => {
  const [isRender, renderSettingContainer] = useState(false);

  return (
    <>
      {isRender && (
        <SettingContainer />
      )}
      <App onClick={renderSettingContainer}>
    </>;
  );
};
const App = ({ onClick }) => (
  <>
    Hello Friends
    <div id="divHello">

    </div>
    <button onClick={onClick}>Button</button>
    </>
  );
ReactDOM.render(<Index />, document.getElementById('root'));
此外,无需使用
ReactDOM
两次,因此请按如下方式编写:

const Index = () => {
  const [isRender, renderSettingContainer] = useState(false);

  return (
    <>
      {isRender && (
        <SettingContainer />
      )}
      <App onClick={renderSettingContainer}>
    </>;
  );
};
const App = ({ onClick }) => (
  <>
    Hello Friends
    <div id="divHello">

    </div>
    <button onClick={onClick}>Button</button>
    </>
  );
ReactDOM.render(<Index />, document.getElementById('root'));
ReactDOM.render(,document.getElementById('root');
如果您有任何问题,请写一条评论,我肯定会回答并更改我的答案


提示:基于Dan Abramov的想法,
类似,代码更少,性能更好。

使用条件渲染,按按钮设置值以显示Hello组件

const Hello = () => (<p>Hello</p>)
const Hello=()=>(Hello

然后在应用程序中,按下按钮时将值设置为true

const App = () => {

  const [displayHello, setDisplayHello] = useState(false);

  const handleClick = () => {
    setDisplayHello(!displayHello)
  };

  return (
    <React.Fragment>
     Hello Friends
    <div id="divHello">

    </div>
    {displayHello && <Hello />}
    <button onClick={handleClick}>Button</button>
   </React.Fragment>
 );
};
const-App=()=>{
const[displayHello,setDisplayHello]=useState(false);
常量handleClick=()=>{
setDisplayHello(!displayHello)
};
返回(
朋友们好
{displayHello&}
按钮
);
};
//获取一个钩子函数
const{useState}=React;
常量Hello=()=>(

来自Hello组件的Hi

) 常量应用=()=>{ const[displayHello,setDisplayHello]=useState(false); 常量handleClick=()=>{ setDisplayHello(!displayHello) }; 返回( 朋友们好 {displayHello&} 按钮 ); }; //渲染它 ReactDOM.render( , document.getElementById(“react”) );
使用条件渲染,按按钮设置值以显示Hello组件

const Hello = () => (<p>Hello</p>)
const Hello=()=>(Hello

然后在应用程序中,按下按钮时将值设置为true

const App = () => {

  const [displayHello, setDisplayHello] = useState(false);

  const handleClick = () => {
    setDisplayHello(!displayHello)
  };

  return (
    <React.Fragment>
     Hello Friends
    <div id="divHello">

    </div>
    {displayHello && <Hello />}
    <button onClick={handleClick}>Button</button>
   </React.Fragment>
 );
};
const-App=()=>{
const[displayHello,setDisplayHello]=useState(false);
常量handleClick=()=>{
setDisplayHello(!displayHello)
};
返回(
朋友们好
{displayHello&}
按钮
);
};
//获取一个钩子函数
const{useState}=React;
常量Hello=()=>(

来自Hello组件的Hi

) 常量应用=()=>{ const[displayHello,setDisplayHello]=useState(false); 常量handleClick=()=>{ setDisplayHello(!displayHello) }; 返回( 朋友们好 {displayHello&} 按钮 ); }; //渲染它 ReactDOM.render( , document.getElementById(“react”) );


你到底想做什么?我需要在点击该组件之外的按钮时使用默认值重新加载settingContainer。也许可以使用Redux?不亲爱的@DominikMatis,请不要,Redux很好,但不适合这种小情况。它可能有一个较高的状态。嗯,我不认为你应该分别呈现两个组件。。。所有内容都应该在应用程序中。你到底想做什么?我需要在点击该组件之外的按钮时使用默认值重新加载settingContainer。可能使用Redux?不,亲爱的@DominikMatis,请不要,Redux很好,但不适合这种小情况。它可能有一个较高的状态。嗯,我不认为你应该分别呈现两个组件。。。所有这些都应该在应用程序中,你的答案就像使用更好的工具一样,我指的是代码片段。我投赞成票。谢谢。你的答案就像使用更好的工具,我是说代码片段。我投赞成票。谢谢