构建一个可以动态改变视图类型的React组件,通常涉及到组件的状态管理和条件渲染。以下是一个基本的示例,展示了如何实现这一功能:
useState
钩子来管理。import React, { useState } from 'react';
// 定义两种不同的视图组件
const ListView = ({ items }) => (
<ul>
{items.map((item, index) => (
<li key={index}>{item}</li>
))}
</ul>
);
const GridView = ({ items }) => (
<div style={{ display: 'grid', gridTemplateColumns: 'repeat(3, 1fr)' }}>
{items.map((item, index) => (
<div key={index}>{item}</div>
))}
</div>
);
// 主组件,包含状态管理和条件渲染
const DynamicViewComponent = ({ items }) => {
const [viewType, setViewType] = useState('list'); // 默认视图类型为列表
const toggleViewType = () => {
setViewType(viewType === 'list' ? 'grid' : 'list');
};
return (
<div>
<button onClick={toggleViewType}>Toggle View</button>
{viewType === 'list' ? (
<ListView items={items} />
) : (
<GridView items={items} />
)}
</div>
);
};
export default DynamicViewComponent;
memo
或PureComponent
来优化子组件的渲染。import React, { useState, memo } from 'react';
const ListView = memo(({ items }) => (
<ul>
{items.map((item, index) => (
<li key={index}>{item}</li>
))}
</ul>
));
const GridView = memo(({ items }) => (
<div style={{ display: 'grid', gridTemplateColumns: 'repeat(3, 1fr)' }}>
{items.map((item, index) => (
<div key={index}>{item}</div>
))}
</div>
));
const DynamicViewComponent = ({ items }) => {
const [viewType, setViewType] = useState('list');
const toggleViewType = () => {
setViewType(viewType === 'list' ? 'grid' : 'list');
};
return (
<div>
<button onClick={toggleViewType}>Toggle View</button>
{viewType === 'list' ? (
<ListView items={items} />
) : (
<GridView items={items} />
)}
</div>
);
};
export default DynamicViewComponent;
通过这种方式,可以有效管理组件的状态和渲染逻辑,同时优化性能和避免样式冲突。
没有搜到相关的文章