javascript - React - 单击位于组件外部的按钮时重新渲染组件

标签 javascript reactjs components react-component

我有index.js我渲染 App 的文件组件。

Index.js 文件

ReactDOM.render(<App />, document.getElementById('root'));

下面是SettingContainer.js 文件的代码,其中我有 SettingContainer成分。我有一个单击按钮,我需要重新渲染 <SettingContainer value="10" />但它不会用 defaultvalues 渲染.

SettingContainer.js 文件:

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.js 的代码我有 App 的文件组件。

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;

最佳答案

其实,你的问题还是回到你的心态上,你应该改变一下对ReactJS的看法。你应该有一个Index容器如下:

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

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

然后,传递onClick从 props 到 App 的函数如下:

const App = ({ onClick }) => (
  <>
    Hello Friends
    <div id="divHello">

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

此外,无需使用 ReactDOM两次,所以写如下:

ReactDOM.render(<Index />, document.getElementById('root'));

如果您有任何问题,请写评论,我一定会回答并更改我的答案。

提示:<></>就像 <React.Fragment></React.Fragment>基于 Dan Abramov 的想法,代码更少,性能更好。

关于javascript - React - 单击位于组件外部的按钮时重新渲染组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60355443/

相关文章:

javascript - 使用 React js Modal 的动态内容

layout - Vaadin - 迭代布局中的组件

Delphi 组件和屏幕阅读器

javascript - 结果与文本区域不匹配 (jQuery)

javascript - 使用 Jest 和 Enzyme 测试 react-router v4

javascript - 避免面板中的列 - extjs

npm - webpack-dev-server:npm 错误 Windows_NT 7601

jsf - 将新组件动态添加到 JSF 组件树时重复 id

javascript - 我在 for 循环内得到相同的对象以进行 Angular 修改

javascript - Angularjs 周围有哪些工具/项目/集成?