我有index.js
个文件,在其中渲染了App
组件。
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.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;
答案 0 :(得分:2)
实际上,您的问题回到了您的思维定势,您应该改变对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'));
如果您有任何问题,请发表评论,当然,我会回答并更改答案。
提示 :根据Dan Abramov的想法,<></>
就像<React.Fragment></React.Fragment>
一样,具有更少的代码和更好的性能。
答案 1 :(得分:1)
使用条件渲染,按按钮设置值以显示Hello组件。
const Hello = () => (<p>Hello</p>)
然后在按下按钮时将App中的值设置为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>