Context提供了一个无需为每层组件手动添加Props,就能在组件树间进行数据传递的方法。
使用场景: 我想要在App.js页面中注入某些内容,然后自定义一个水印组件。水印组件中的内容就是我在App.js中想要全局展示的固定内容。
const MyContext = React.createContext(defaultValue);
import React from "react";
let { Provider, Consumer } = React.createContext()
export {
Provider,
Consumer
}
import { Provider } from './utils/context';
function App() {
let userInfo ={
name: 'Ably',
age: 25,
phone: 188******31,
email: '**********@163.com'
}
return (
...
);
}
export default App;
import Watermark from '../../components/Watermark'
render() {
return (
// 水印组件
}>
)
}
import { Component } from 'react';
import { Consumer } from '../../utils/context';
import './index.scss'
export default class Watermark extends Component {
render() {
return (
{
({sendItem}) => {
return (
{sendItem.name}
{sendItem.email}
)
}
}
)
}
}
.watermark {
transform: rotate(45deg);
position: fixed; // 使用fixed固定定位,只要展示固定的值,那么之后这个无论页面如何滑动,都能保证下面的水印不被更改
width: 100%;
height: 100%;
color: rgb(247, 243, 243);
font-size: 44px;
text-align: center;
line-height: 100%;
padding-top: 160px;
z-index: -1;
}
.mr_8 {
margin-right: 8px;
}
只有固定某个位置有水印,一旦页面中的其他内容需要保密打水印时,容易产生遗漏情况,我们可以将满屏大多数位置上增加自己的水印
import { Component } from 'react';
import { Consumer } from '../../utils/context';
import './index.scss'
export default class Watermark extends Component {
render() {
let arrLenth = 6
const list = Array.from({length: arrLenth})
return (
{
({sendItem}) => {
return (
{
list.map((item, parentIndex) => {
return
{
list.map((item, index) => {
return -
Ably
{/* {sendItem.name} */}
********131
{/* {sendItem.email} */}
})
}
})
}
)
}
}
)
}
}
.watermark {
position: fixed;
width: 100vw;
height: 100vh;
color: rgb(247, 243, 243);
font-size: 22px;
line-height: 100%;
z-index: -1;
display: flex;
justify-content: space-between;
align-items: stretch;
top: 0;
left: 0;
}
.watermark_column {
display: flex;
flex-direction: column;
justify-content: space-around;
}
.watermark_column_item {
transform: rotate(45deg);
}
.mr_8 {
margin-right: 8px;
}
总结用法,希望可以帮助到你,
我是Ably,你无须超越谁,只要超越昨天的自己就好~