我试图弄清楚在更改了类列表所依赖的状态值后如何重新渲染组件。我假设是因为它不是组件的直接属性,所以不会为我重新渲染。
当showDetails
状态变量更改时,我想重新呈现的“我的详细信息”组件:
import React, { useContext } from 'react';
import { ScheduleContext } from '../../schedule-context';
const Details = () => {
const showDetails = useContext(ScheduleContext).showDetails;
const className =
'col details-col' + (showDetails ? '' : ' d-none');
return <div className={className}>details...</div>;
};
export default Details;
该状态变量设置在其他组件中,该组件本质上是Details组件的一个姨妈/叔叔:
订单组件部分代码:
const toggleDetails = () => {
setShowDetails((showDetails) => !showDetails);
};
return (
<Draggable draggableId={orderID} index={props.index}>
{(provided, snapshot) => (
<MyOrder
className={'order'}
ref={provided.innerRef}
{...provided.draggableProps}
{...provided.dragHandleProps}
isDragging={snapshot.isDragging}
onClick={toggleDetails}
从我的阅读中,强迫重新渲染组件是令人讨厌的。因此,我假设有一种方法可以在更新该状态变量时自动将其完全重新渲染。
答案 0 :(得分:1)
来自Details
父母
import React, { useContext } from 'react';
import { ScheduleContext } from '../../schedule-context';
const SmartComponent = () => {
const showDetails = useContext(ScheduleContext).showDetails;
return <Details showDetails />;
};
export default Details;
// Dumb component
const Details = ({ showDetails }) => {
const className = 'col details-col' + (showDetails ? '' : ' d-none');
return <div className={className}>details...</div>;
};
拥有处理笨拙组件的智能组件是一个很好的习惯