4 回答

TA貢獻1828條經驗 獲得超4個贊
您的for循環在第一次迭代后終止,因為return立即終止函數調用。您需要將 JSX 元素累積到數組中并使用它。displayProgressBar您也根本不需要該功能。
const ProgressBar = (props) => {
const { activeStep, totalSteps } = props;
const steps = [];
for (let i = 1; i <= totalSteps; i++) {
steps.push(<div>Hello</div>);
}
return (<div className="progressBar">{ steps }</div>);
};
您可能應該active向該activeStep項目添加一個類或其他內容,以便選擇它,steps.push(...)從上面更改為:
steps.push(<div className={ i == activeStep ? "active" : "" }>Hello</div>);

TA貢獻1802條經驗 獲得超4個贊
您“...具有映射數組的經驗...”那么這應該是小菜一碟;它是完全一樣的。如果問題更多是關于如何獲取數字并將其轉換為數組(我認為是這樣),那么常見的模式是[...Array(5).keys()]. 一旦你有了一個數組,你就可以像平常一樣在 JSX 中映射它。
const ProgressBar = (props) => {
const { activeStep, totalSteps } = props;
const displayProgressBar = () =>
[...Array(totalSteps).keys()].map((step) => <div key={step}>Hello</div>);
return <div className="progressBar">{displayProgressBar()}</div>;
};
不過,內聯數組可能更簡單。
const ProgressBar = (props) => {
const { activeStep, totalSteps } = props;
return (
<div className="progressBar">
{[...Array(totalSteps).keys()].map((step) => {
// logic to compare against activeStep
return (
<div key={step}>Hello</div>
))}}
</div>
);
};

TA貢獻1874條經驗 獲得超12個贊
您可以為此動態創建一個數組
const ProgressBar = (props) => {
const { activeStep, totalSteps } = props;
const steps = new Array(totalSteps).fill().map((_,index)=>{
const stepIndex = index+1;
const activeClassName = stepIndex === activeStep ? 'active':undefine;
return <div className={activeClassName}>{stepIndex}</div>
});
return <div className="progressBar">{display}</div>;
};

TA貢獻1798條經驗 獲得超7個贊
好吧,您確實需要一個元素數組,那么創建數組有什么問題呢?
const ProgressBar = (props) => {
const { activeStep, totalSteps } = props;
const steps = (new Array(totalSteps))
.fill(undefined)
.map((step, index) => (
// If the step is active (or past) step, give it a grey background
<div key={index} style={{ backgroundColor: index + 1 <= activeStep ? 'grey' : 'white' }}>
{index+1}
</div>
));
return <div className="progressBar">{steps}</div>;
};
像這樣的東西將創建一個元素數組并相應地為它們著色
添加回答
舉報