Arrays 如何使我的代码成为可重用组件?
下面是我的代码。我想重构它,使之成为一个可重用的组件,但不知道如何开始。我怎么做?非常感谢您的回答。Lorem ipsum dolor sit amet,是一位杰出的献身者。毛里斯拍卖人马萨·尼西、金丝雀、乌拉库斯湖、弗林利亚ac精英、秃鹫权杖马萨Arrays 如何使我的代码成为可重用组件?,arrays,reactjs,components,Arrays,Reactjs,Components,下面是我的代码。我想重构它,使之成为一个可重用的组件,但不知道如何开始。我怎么做?非常感谢您的回答。Lorem ipsum dolor sit amet,是一位杰出的献身者。毛里斯拍卖人马萨·尼西、金丝雀、乌拉库斯湖、弗林利亚ac精英、秃鹫权杖马萨 import React, { useState } from 'react'; import { Link } from 'react-router-dom'; import './styles.css'; const Commitment =
import React, { useState } from 'react';
import { Link } from 'react-router-dom';
import './styles.css';
const Commitment = () => {
const [ fields, setFields ] = useState([{ value: "" }]);
function handleChange(key, event) {
const values = [...fields];
values[key].value = event.target.value;
setFields(values);
}
function handleAdd() {
const values = [...fields];
values.push({ value: "" });
setFields(values);
}
function handleRemove(key) {
const values = [...fields];
values.splice(key, 1)
setFields(values);
}
return (
<div className="container">
<div className="row">
<div className="col-md-12 col-page">
<h1 className="page-heading">Create Your KLC</h1>
<p>Make a commitment about something that you will commit to working on in this area:</p>
</div>
<div className="col-md-12">
<form id="form-commitment">
<div className="form-group">
<p className="form-label">My Commitment <i className="icon-help"></i></p>
</div>
{
fields.map((field, i) => {
return (
<div key={`${field}-${i}`} className="form-group text-dynamic-inputs">
<i className="icon-dynamic-inputs-counter">{i + 1}</i>
<input
type="text"
className="form-control"
value={field.value}
placeholder="Enter the text"
onChange={e => handleChange(i, e)}
/>
<button type="button" className="btn-remove" style={{ display: i === 0 && "none"}} onClick={() => handleRemove(i)}>
</button>
</div>
);
})
}
</form>
<i className="icon-add-new"></i><Link to="#" onClick={() => handleAdd()} className="link-add-new">Add new</Link>
</div>
</div>
</div>
)
}
export default Commitment;
import React,{useState}来自“React”;
从'react router dom'导入{Link};
导入“./styles.css”;
常量承诺=()=>{
const[fields,setFields]=useState([{value:'}]);
功能手柄更改(键、事件){
常量值=[…字段];
值[key].value=event.target.value;
设置字段(值);
}
函数handleAdd(){
常量值=[…字段];
push({value:});
设置字段(值);
}
功能手柄移动(键){
常量值=[…字段];
值。拼接(图例1)
设置字段(值);
}
返回(
创建您的KLC
对你将致力于这一领域的工作做出承诺:
我的承诺
{
fields.map((字段,i)=>{
返回(
{i+1}
handleChange(i,e)}
/>
handleRemove(i)}>
);
})
}
handleAdd()}className=“link add new”>add new
)
}
出口违约承诺;
`让我们先把巨大的组件分解成更小的哑组件 通过查看您的代码,看起来像
页面标题
,表单承诺
,在表单内部,字段
似乎可以是转储组件,icon add new
也可以是转储组件,所以让我们先将它们分开,然后将代码移动到适当的组件
PageHeading
export const PageHeading= props => (
<div className="col-md-12 col-page">
<h1 className="page-heading">Create Your KLC</h1>
<p>Make a commitment about something that you will commit to working on in this
area:</p>
</div>
);
);
和字段
这样的组件
export const FormCommitment = props => (
<div className="col-md-12">
<form id="form-commitment">
<div className="form-group">
<p className="form-label">
My Commitment <i className="icon-help"></i>
</p>
{props.children()}
</div>
</form>
export const Field = props => (
<div className="form-group text-dynamic-inputs">
<i className="icon-dynamic-inputs-counter">{i + 1}</i>
<input
type="text"
className="form-control"
value={props.field.value}
placeholder="Enter the text"
onChange={e => props.handleChange(i, e)}
/>
<button
type="button"
className="btn-remove"
style={{ display: props.index === 0 && "none" }}
onClick={() => props.handleRemove(i)}
></button>
</div>
);
export const Field=props=>(
{i+1}
道具.手变(i,e)}
/>
道具.把手移动(i)}
>
);
现在出现了重构后看起来像这样的智能组件
<Container>
<PageHeading />
<FormCommitment>
{fields.map(field, index) => (
<FormField
onChange= {handleChange}
onRemove= {handleRemove}
key={`${field}-${index}`}
index= {index}
field= {field}
/>
)}
</FormCommitment>
<AddNew onChange = {handleAdd}/>
</Container>
{fields.map(字段,索引)=>(
)}
希望这会有帮助通过道具传递数据,并定义类似于单击父级的处理程序。就是这样。@tarzenchugh将您的代码拆分为多个文件,比如将数据从父组件传递到子组件,并在子组件内部进行迭代。