我有一个呈现App组件的index.js文件。
Index.js文件
ReactDOM.render(<App />, document.getElementById('root'));下面是我有SettingContainer组件的SettingContainer.js文件的代码。我有一个按钮点击它,我需要重新渲染<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组件的App.js文件的代码。
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;发布于 2020-02-23 02:48:46
实际上,你的问题回到了你的心态上,你应该改变你对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>一样,代码更少,性能更好。
发布于 2020-02-23 02:51:33
使用条件渲染,按下按钮设置值即可显示Hello组件。
const Hello = () => (<p>Hello</p>)然后在App中,按下按钮时将value设置为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>
);
};
// 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")
);<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>
https://stackoverflow.com/questions/60355443
复制相似问题