美文网首页
useControllableValue

useControllableValue

作者: skoll | 来源:发表于2022-02-11 15:44 被阅读0次

使用场景

1 .组件的状态不仅可以自己管理,也可以被外部控制

    let [values,setValues]=useState({})
//B组件内部的值,但是他的默认值是根据props传下来决定的
    let [id,setID]=useState()
    const previous=usePrevious(values)
    useDebounce(values, { wait: 500 });

    useEffect(()=>{
        if(props.rightObject.status==='ok'){
            setValues(props.rightObject.data)
            setID(props.rightObject.id)
        }
    },[props.rightObject])
    // 依赖有不是这个的

1 .外面

  const [value,setValue]=useState({name:'123'})
<Test value={value} onChange={(data)=>{console.log('发生变化',data);setValue(data)}}/>

2 .里面:每一个小的修改都必须提交.然后传递给外面,外面在拿到传过去的新的值,然后再通过props传下来

//传入的时候必须是这些.props,他取得值是props.value.所以上面传下来的时候必须是value={}这种形式往下传
const [values,setValues]=useControllableValue(props)
//最坑的就是setValues调用之后,只能把值更新到外面的value,里面的value永远只拿到上面props传下来的值,不会改到本地的值

const [value,setValue]=useControllableValue(props)
    function handleChange(){
        console.log('click')
        value.name='234'
        console.log(value)
        setValue(Object.assign({},{name:"234"}))

        //这种set的操作,只会把新的值发到外面,里面已经生成的值就不变了.
        // 也就是尽管修改一个
    }
    console.log()
    return (
        <div className="header">
           <button onClick={handleChange}>{value.name}</button> 
        </div>
    )

相关文章

  • useControllableValue

    使用场景 1 .组件的状态不仅可以自己管理,也可以被外部控制 坑 1 .外面 2 .里面:每一个小的修改都必须提交...

网友评论

      本文标题:useControllableValue

      本文链接:https://www.haomeiwen.com/subject/prgakrtx.html