从 material-ui 按钮 onClick 渲染 JSX
Render JSX from material-ui Button onClick
我正在尝试在单击 material-ui 按钮时呈现 JSX。单击时我正在登录到控制台,但看不到任何 JSX 被渲染。
interface TileProps {
address?: string;
}
const renderDisplayer = (address: string) => {
console.log('Rendering address', address!);
if (typeof(address) == 'undefined' || address == '') {
return(<div className='error'><li>No address found</li></div>)
}
return(<AddressDisplayer address={address} />)
}
const Tile = (props: TileProps) => {
return(
<div className='tile'>
<ul>
<li>{props.address}</li>
</ul>
<Button variant='contained' onClick={() => {renderDisplayer(props.address)}}>Display</Button>
</div>
)
}
export default Tile;
单击按钮时我可以看到 console.log('Rendering address', address!);
运行,但 JSX 未呈现。
这可能是因为我使用的是 React 功能组件而不是 class 组件吗?
请阅读 生命周期 这不是反应如何工作 onclick 功能
renderDisplayer 被调用并且 return JSX 到 onClick 事件你需要在这里使用 state 来渲染组件与三元运算符 renderDisplayer 函数做 setState 所以 DOM 将更新
我不太清楚你的问题。如果要根据typeof(address) == 'undefined' || address == ''
条件渲染<div className='error'><li>No address found</li></div>
,则无需点击按钮,最好使用条件渲染。例如:
{!props.address ? (
<div className='error'><li>No address found</li></div>
) : (
<AddressDisplayer address={props.address} />
)}
但是如果你想通过点击按钮来渲染你的地址组件,你应该定义一个状态并在点击按钮时将其设置为真。像这样:
const [shouldShowAddress, setShouldShowAddress] = useState(false);
{shouldShowAddress && (
<>
{!props.address ? (
<div className="error">
<li>No address found</li>
</div>
) : (
<AddressDisplayer address={props.address} />
)}
</>
)}
<Button
variant="contained"
onClick={() => {
setShouldShowAddress(true)
}}
>
Display
</Button>
我正在尝试在单击 material-ui 按钮时呈现 JSX。单击时我正在登录到控制台,但看不到任何 JSX 被渲染。
interface TileProps {
address?: string;
}
const renderDisplayer = (address: string) => {
console.log('Rendering address', address!);
if (typeof(address) == 'undefined' || address == '') {
return(<div className='error'><li>No address found</li></div>)
}
return(<AddressDisplayer address={address} />)
}
const Tile = (props: TileProps) => {
return(
<div className='tile'>
<ul>
<li>{props.address}</li>
</ul>
<Button variant='contained' onClick={() => {renderDisplayer(props.address)}}>Display</Button>
</div>
)
}
export default Tile;
单击按钮时我可以看到 console.log('Rendering address', address!);
运行,但 JSX 未呈现。
这可能是因为我使用的是 React 功能组件而不是 class 组件吗?
请阅读 生命周期 这不是反应如何工作 onclick 功能 renderDisplayer 被调用并且 return JSX 到 onClick 事件你需要在这里使用 state 来渲染组件与三元运算符 renderDisplayer 函数做 setState 所以 DOM 将更新
我不太清楚你的问题。如果要根据typeof(address) == 'undefined' || address == ''
条件渲染<div className='error'><li>No address found</li></div>
,则无需点击按钮,最好使用条件渲染。例如:
{!props.address ? (
<div className='error'><li>No address found</li></div>
) : (
<AddressDisplayer address={props.address} />
)}
但是如果你想通过点击按钮来渲染你的地址组件,你应该定义一个状态并在点击按钮时将其设置为真。像这样:
const [shouldShowAddress, setShouldShowAddress] = useState(false);
{shouldShowAddress && (
<>
{!props.address ? (
<div className="error">
<li>No address found</li>
</div>
) : (
<AddressDisplayer address={props.address} />
)}
</>
)}
<Button
variant="contained"
onClick={() => {
setShouldShowAddress(true)
}}
>
Display
</Button>