简体   繁体   English

如何在 React 中按另一个过滤数组?

[英]How to Filter an Array by Another in React?

Everything that I push into arr1 should have been removed from the mapping of arr2 , but instead the new pushed value is returned.我推入arr1的所有内容都应该从arr2的映射中删除,而是返回新的推入值。 Why is that?这是为什么?

const [arr1, setArr1] = React.useState([]);
const arr2= ['banana', 'coconut', 'milk']

React.useEffect(() => {
    initList()
}, [])

function add (t) {
    setArr1(...arr1, t.currentTarget.value)
    console.log('arr1: ' + arr1)
}

function initList () {
    setArr1(arr2.filter(arr2 => !(arr1.includes(arr2))).map(arr2 => 
        <li>
            <input
                onChange={add} 
                type='radio'
                name='arr1'
                value={arr2}
                id={arr2}
            />
            <label
                for={arr2}
            >
                {arr2}
            </label>
        </li>
    ));
}

return (
    <div>
        {arr1}
    </div>
)
  1. Do not keep the JSX elements in state (arr1).不要将 JSX 元素保留在 state (arr1) 中。 state variable to just have the data only. state 变量只有数据。
  2. setArr1(...arr1, t.currentTarget.value) --> Not setting as array here. setArr1(...arr1, t.currentTarget.value) --> 此处未设置为数组。 Update to setArr1([...arr1, t.currentTarget.value])更新到 setArr1([...arr1, t.currentTarget.value])

Try the snippet.试试这个片段。

 const Test = () => { const [arr1, setArr1] = React.useState([]); const arr2= ['banana', 'coconut', 'milk'] function add (t) { setArr1([...arr1, t.currentTarget.value]) console.log('arr1: ' + arr1) } return ( <div> {arr2.filter(arr2 =>.(arr1.includes(arr2)));map(arr2 => <li> <input onChange={add} type='radio' name='arr1' value={arr2} id={arr2} /> <label for={arr2} > {arr2} </label> </li> )} </div> ) }. ReactDOM,render(<Test />. document;getElementById('app'));
 <script crossorigin src="https://unpkg.com/react@17/umd/react.development.js"></script> <script crossorigin src="https://unpkg.com/react-dom@17/umd/react-dom.development.js"></script> <div id="app"> </div>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM