首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >React - Rerender组件单击位于组件外部的按钮

React - Rerender组件单击位于组件外部的按钮
EN

Stack Overflow用户
提问于 2020-02-23 02:33:48
回答 2查看 3.7K关注 0票数 1

我有一个呈现App组件的index.js文件。

Index.js文件

代码语言:javascript
复制
ReactDOM.render(<App />, document.getElementById('root'));

下面是我有SettingContainer组件的SettingContainer.js文件的代码。我有一个按钮点击它,我需要重新渲染<SettingContainer value="10" />,但它不渲染与defaultvalues

SettingContainer.js文件:

代码语言:javascript
复制
import React from 'react';

const SettingContainer = (props) => {
    const [state, setState] = React.useState({
        currentValue: props.value
    });

    const handleChange = (event) => {
        setState({ currentValue: event.target.value });
    };

    return (
        <React.Fragment>
            <input type='text' value={state.currentValue} onChange={handleChange} />
        </React.Fragment>
    )

};

export default SettingContainer;

下面是我拥有App组件的App.js文件的代码。

App.js文件

代码语言:javascript
复制
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;
EN

回答 2

Stack Overflow用户

发布于 2020-02-23 02:48:46

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

代码语言:javascript
复制
const Index = () => {
  const [isRender, renderSettingContainer] = useState(false);

  return (
    <>
      {isRender && (
        <SettingContainer />
      )}
      <App onClick={renderSettingContainer}>
    </>;
  );
};

然后,将onClick函数从props传递给App,如下所示:

代码语言:javascript
复制
const App = ({ onClick }) => (
  <>
    Hello Friends
    <div id="divHello">

    </div>
    <button onClick={onClick}>Button</button>
    </>
  );

此外,不需要使用两次ReactDOM,因此请按如下方式编写:

代码语言:javascript
复制
ReactDOM.render(<Index />, document.getElementById('root'));

如果你有任何问题,写一个评论,当然,我会回答,并会改变我的答案。

提示:基于丹·阿布拉莫夫的想法,<></>就像<React.Fragment></React.Fragment>一样,代码更少,性能更好。

票数 2
EN

Stack Overflow用户

发布于 2020-02-23 02:51:33

使用条件渲染,按下按钮设置值即可显示Hello组件。

代码语言:javascript
复制
const Hello = () => (<p>Hello</p>)

然后在App中,按下按钮时将value设置为true。

代码语言:javascript
复制
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>
 );
};

代码语言:javascript
复制
// Get a hook function
const {useState} = React;

const Hello = () => (<p style={{ backgroundColor: 'green', color: 'white'}}>Hi from Hello Component</p>)

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>
   );
  };


// Render it
ReactDOM.render(
  <App />,
  document.getElementById("react")
);
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.8.4/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.8.4/umd/react-dom.production.min.js"></script>
<div id="react"></div>

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60355443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档