반응 후크 양식을 사용하여 중첩 배열을 만들려고합니다. 샘플 코드와 함께 샌드 박스를 첨부했습니다.
코드 스 니펫
<ul>
{fields.map((item, index) => {
return (
<li key={item.id}>
<label> single input </label>
<input
name={`test[${index}].task`}
ref={register()}
defaultValue={item.task}
/>
<br />
<label> first Name </label>
<input
name={`test[${index}].name.first`}
ref={register()}
defaultValue={item.name.first}
/>
<br />
<label>last Name </label>
<input
name={`test[${index}].name.last`}
ref={register()}
defaultValue={item.name.last}
/>
<br />
<label>First Nested </label>
<input
name={`test[${index}].nestedArray[${index}].firstNested`}
ref={register()}
// defaultValue={item.nestedArray.nested}
/>
<br />
<label> Second Nested </label>
<input
name={`test[${index}].nestedArray[${index}].secondNested`}
ref={register()}
// defaultValue={item.nestedArray.nested}
/>
<br />
<button type="button" onClick={() => remove(index)}>
Delete
</button>
</li>
);
})}
</ul>
발행물
초기 단계는 잘 작동합니다. "nestedArray"에서 데이터를 가져올 수 있습니다. 하지만 두 개 이상의 중첩 배열을 추가하면 데이터가 표시됩니다. 내 "nestedArray"는 항상 "null"로 시작하고 더 추가하면 "null"이 계속 추가됩니다. 이 "null"값을 어떻게 피할 수 있습니까? 이전 입력을 유지하고 싶지 않습니다. null 값을 완전히 피하고 싶습니다.
샘플 출력
{
"test":[
{
"task":"single",
"name":{
"first":"Jack",
"last":"Box"
},
"nestedArray":[
{
"firstNested":"firstNested",
"secondNested":"firstSecondNested"
}
]
},
{
"task":"Second",
"name":{
"first":"Kate",
"last":"Smith"
},
"nestedArray":[
**null,**
{
"firstNested":"SecondNested",
"secondNested":"SecondNestedSecond"
}
]
}
]
}
예상되는 샘플 출력
{
"test":[
{
"task":"single",
"name":{
"first":"Jack",
"last":"Box"
},
"nestedArray":[
{
"firstNested":"firstNested",
"secondNested":"firstSecondNested"
}
]
},
{
"task":"Second",
"name":{
"first":"Kate",
"last":"Smith"
},
"nestedArray":[
{
"firstNested":"SecondNested",
"secondNested":"SecondNestedSecond"
}
]
}
]
}
Sandbox에서 재현하는 단계
참고 문헌
코드 스 니펫
<ul>
{fields.map((item, index) => {
return (
<li key={item.id}>
<label> single input </label>
<input
name={`test[${index}].task`}
ref={register()}
defaultValue={item.task}
/>
<br />
<label> first Name </label>
<input
name={`test[${index}].name.first`}
ref={register()}
defaultValue={item.name.first}
/>
<br />
<label>last Name </label>
<input
name={`test[${index}].name.last`}
ref={register()}
defaultValue={item.name.last}
/>
<br />
<label>First Nested </label>
<input
name={`test[${index}].nestedArray[${index}].firstNested`}
ref={register()}
// defaultValue={item.nestedArray.nested}
/>
<br />
<label> Second Nested </label>
<input
name={`test[${index}].nestedArray[${index}].secondNested`}
ref={register()}
// defaultValue={item.nestedArray.nested}
/>
<br />
<button type="button" onClick={() => remove(index)}>
Delete
</button>
</li>
);
})}
</ul>
이것에 대해 어떻게 작동합니까, 배열 대괄호를 유지하고 null이 없습니다.
아마도 맵 인덱스가 증가했기 때문에 nestedArray는 현재 맵 인덱스에있는 값을 필터링하지만 다음 인덱스로 이동하지 않았기 때문에 해당 반복에 대해 null을 생성합니다.
<ul>
{fields.map((item, index) => {
return (
<li key={item.id}>
<label> single input </label>
<input
name={`test[${index}].task`}
ref={register()}
defaultValue={item.task}
/>
<br />
<label> first Name </label>
<input
name={`test[${index}].name.first`}
ref={register()}
defaultValue={item.name.first}
/>
<br />
<label>last Name </label>
<input
name={`test[${index}].name.last`}
ref={register()}
defaultValue={item.name.last}
/>
<br />
<label>First Nested </label>
<input
name={`test[${index}].nestedArray[0].firstNested`} //changed index to 0
ref={register()}
// defaultValue={item.nestedArray.nested}
/>
<br />
<label> Second Nested </label>
<input
name={`test[${index}].nestedArray[0].secondNested`} //changed index to 0
ref={register()}
// defaultValue={item.nestedArray.nested}
/>
<br />
<button type="button" onClick={() => remove(index)}>
Delete
</button>
</li>
);
})}
</ul>
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다