useContext使用实践

252 阅读1分钟

前言

在日常项目中,useContext的使用场景挺多的,父子组件传参,传递方法,但每次使用都需要搜一下文章进行参照,而且有很多不同的使用方法,现根据自己的实践进行总结,加深印象~

正文

1. 组件之间传递参数

1. 父组件向子组件传参(包括变量和方法)

//父组件
    import myContext from '@/utils/createContext';
    <myContext.Provider value={{ modalVisible, applyObj, now, queryData }}>
        <ApplayPermission />
    </myContext.Provider>

//子组件
import myContext from '@/utils/createContext';
const modalData: any = useContext(myContext);
  
useEffect(() => {
    // console.log(modalData);这里是接收到的父组件传过来的参数
}, [modalData.now]);

2. 父组件向子组件传参(通过props)

//父组件
import Child from './component/child';
<Child value={toChildMsg} click={toChildFuc} />

//子组件
export default (props: any) => {
  const { value, click } = props;
  return (
    <div onClick={click}>
      子组件{value}
    </div>
  )
}

3. 子组件向父组件传参(方法)

//子组件向父组件传递方法,即父组件中调用子组件的方法

//子组件
export default(cRef)=>{
    useImperativeHandle(cRef, () => ({
    // changeVal 就是暴露给父组件的方法
    changeVal: () => {
      // console.log()
    },
  }));
}

//父组件中
  const childRef = useRef();
  const updateChildState = () => {
    // changeVal就是子组件暴露给父组件的方法
    childRef.current?.changeVal();
  };
  
  <ApplayPermission cRef={childRef} />
  

4. 子组件向父组件传递变量(通过方法传递参数)

//父组件
  const changeRisk = useCallback((key, type, name) => {
    console.log(key, type, name);
    //key,type,name 就是从子组件传递过来的变量
  }, []);
<RiskTable changeRisk={changeRisk} />

//子组件

  const { changeRisk } = props;
  const childClick = useCallback(
    (key, type, name?) => changeRisk(key, type, name),
    [changeRisk],
  );
  
  <a onClick={() => childClick(record.parentCode, 'add_brother')}>
    添加同级标
  </a>
          

2. React Hook 中 createContext & useContext 跨组件透传上下文与性能优化

(后续待完善..)