Reactjs 最基本形式的javascript对象数组

Reactjs 最基本形式的javascript对象数组,reactjs,Reactjs,需要在react中存储和访问数组上的值。到目前为止,我找到了使用过滤器或不符合我要求的解决方案 只需要使用string键推送一个字符串值,然后使用相同的键检索它。怎么做 代码: 导入“/styles.css”; 从“react”导入{useRef}; 导出默认函数App(){ const Presence=useRef({}); 函数objTest(){ Presence.current.length=0; const uid=“UID1”//Date.now().toString(); //让

需要在react中存储和访问数组上的值。到目前为止,我找到了使用过滤器或不符合我要求的解决方案

只需要使用string键推送一个字符串值,然后使用相同的键检索它。怎么做

代码:

导入“/styles.css”; 从“react”导入{useRef}; 导出默认函数App(){ const Presence=useRef({}); 函数objTest(){ Presence.current.length=0; const uid=“UID1”//Date.now().toString(); //让obj={[uid]:{presence:“Busy”}; 让obj={[uid]:“Busy”}; 存在、电流、推力(obj); log(Presence.current,,,Presence.current[uid]); } 返回( 你好,代码沙盒 {objTest()} ); } 只需要使用string键推送一个字符串值,然后使用相同的键检索它

所有现代浏览器都支持,这正是您想要的:

const Presence = useRef(new Map());
您可以像这样使用它:

Presence.current.set(key, value)
Presence.current.has(key)
Presence.current.get(key)

旧的方法是使用一个对象文本,就像您有
constpresence=useRef({})
并使用like
Presence.current[uid]=“Busy”
添加动态键。对象文本没有
length
size
属性,并且更难枚举,因此除非您需要支持IE,否则我不建议使用它

只需要使用string键推送一个字符串值,然后使用相同的键检索它

所有现代浏览器都支持,这正是您想要的:

const Presence = useRef(new Map());
您可以像这样使用它:

Presence.current.set(key, value)
Presence.current.has(key)
Presence.current.get(key)

旧的方法是使用一个对象文本,就像您有
constpresence=useRef({})
并使用like
Presence.current[uid]=“Busy”
添加动态键。对象文本没有
长度
大小
属性,更难枚举,因此我不建议使用它,除非您需要支持IE

为什么不使用状态

const Component = () => {

 const [ state, setState ] = useState({});
 const [ arrayState, setArrayState ] = useState([])
 const [ savedUid, setSavedUid ] = useState('') //need to save your UID too

 function objTest() {
    
        const uid = "UID1"; //Date.now().toString();
        setState({ [uid]: 'Busy'}) // object
        setArrayState(prev => [...prev, { [uid]: 'Busy' }] ) //array of objects
        setSavedUid(uid) //save your uid
 }
 console.log('Object', state[savedUid])
 console.log('Array of Objects', arrayState[0][savedUid])

 return <button onClick={objTest}>Click Me</button>
const组件=()=>{
const[state,setState]=useState({});
常量[arrayState,setArrayState]=useState([])
const[savedUid,setSavedUid]=useState(“”)//也需要保存UID
函数objTest(){
const uid=“UID1”//Date.now().toString();
setState({[uid]:'Busy'})//对象
setArrayState(prev=>[…prev,{[uid]:'Busy'}])//对象数组
setSavedUid(uid)//保存您的uid
}
console.log('Object',state[savedUid])
console.log('Array of Objects',arrayState[0][savedUid])
返回单击我
}为什么不使用状态

const Component = () => {

 const [ state, setState ] = useState({});
 const [ arrayState, setArrayState ] = useState([])
 const [ savedUid, setSavedUid ] = useState('') //need to save your UID too

 function objTest() {
    
        const uid = "UID1"; //Date.now().toString();
        setState({ [uid]: 'Busy'}) // object
        setArrayState(prev => [...prev, { [uid]: 'Busy' }] ) //array of objects
        setSavedUid(uid) //save your uid
 }
 console.log('Object', state[savedUid])
 console.log('Array of Objects', arrayState[0][savedUid])

 return <button onClick={objTest}>Click Me</button>
const组件=()=>{
const[state,setState]=useState({});
常量[arrayState,setArrayState]=useState([])
const[savedUid,setSavedUid]=useState(“”)//也需要保存UID
函数objTest(){
const uid=“UID1”//Date.now().toString();
setState({[uid]:'Busy'})//对象
setArrayState(prev=>[…prev,{[uid]:'Busy'}])//对象数组
setSavedUid(uid)//保存您的uid
}
console.log('Object',state[savedUid])
console.log('Array of Objects',arrayState[0][savedUid])
返回单击我

}

您提到了数组,但代码使用的是对象。你想要对象还是数组?如果您使用的是Presence.current[uid],则无法访问“busy”。我不确定这需要哪种方式,我的优先级是object。您提到了数组,但您的代码使用的是object。你想要对象还是数组?如果您使用的是Presence.current[uid],则无法访问“busy”。我不确定哪种方式可以满足此需求,我的优先级是object。感谢您的回复。没有map还有其他方法吗?另一种方法是使用对象文字,就像使用
constpresence=useRef({})和do
状态。当前[uid]=“忙”
。对象文本没有
length
size
属性,并且更难枚举,因此我不建议使用它,除非您需要支持IET。代码在codesandBox上运行良好,但在我的VSCode项目中,它给了我一个错误-
TypeError:Presence.current.set不是函数
。你能给我一些关于解决这个问题的提示吗?@Rifat try
console.log(Presence.current)
看看它是否仍然是一张地图。可能您的实际cod是将其设置为
null
,或者在某个点将其解决。还有一件事,我需要一种在地图值更改时更新UI的方法。所以我用useState
const presenceCondition=useRef(newmap())设置了另一个变量;const[Presence,setPresence]=useState(newmap());presenceCondition.current.set(uid,presenceConditionVariable);setPresence(presenceCondition.current)和更新,并使用它的值,它最初显示,但我并没有得到更新UI的成功。您能帮我更新UI吗?谢谢您的回复。没有map还有其他方法吗?另一种方法是使用对象文字,就像使用
constpresence=useRef({})和do
状态。当前[uid]=“忙”
。对象文本没有
length
size
属性,并且更难枚举,因此我不建议使用它,除非您需要支持IET。代码在codesandBox上运行良好,但在我的VSCode项目中,它给了我一个错误-
TypeError:Presence.current.set不是函数
。你能给我一些关于解决这个问题的提示吗?@Rifat try
console.log(Presence.current)
看看它是否仍然是一张地图。可能您的实际cod是将其设置为
null
,或者在某个点将其解决。还有一件事,我需要一种在地图值更改时更新UI的方法。所以我用useState
const presenceCondition=useRef(newmap())设置了另一个变量;const[Presence,setPresence]=useState(newmap());presenceCondition.current.set(uid,presenceConditionVariable);setPresence(presenceCondition.current)和更新,并使用它的值,它最初显示,但我并没有得到更新UI的成功。你能帮我一下吗