react-native-visitor
Version:
基于React开发方式,jsx对象一旦生成将无法修改。但如果你有对jsx生成对象二次修改的需求时,ReactDOM可以通过ref获取到Element引用进行修改,但ReactNative则无能为力……ReactNativeVisitor便是提供你对jsx产生的对象进行二次修改的能力,想改啥就改啥!
227 lines (226 loc) • 7.5 kB
TypeScript
import React from 'react';
import { ImageStyle, StyleSheet, TextStyle, ViewStyle } from 'react-native';
export declare type Style = ViewStyle | TextStyle | ImageStyle;
/**
* 创建一个可嵌套的样式表
*
* @author Raykid
* @date 2019-08-13
* @export
* @template T
* @param {(T | StyleSheet.NamedStyles<T>)} styles
* @returns {{[P in keyof T]:any}}
*/
export declare function createStyleSheet<T extends StyleSheet.NamedStyles<T> | StyleSheet.NamedStyles<any>>(styles: T | StyleSheet.NamedStyles<T>): any;
/**
* 筛选文本可以继承的样式
*
* @author Raykid
* @date 2019-09-09
* @export
* @param {Style} style
* @returns {TextStyle}
*/
export declare function filterTextStyles(style: Style): TextStyle;
/**
* 合并样式
*
* @author Raykid
* @date 2019-08-13
* @export
* @param {...Style[]} styles
* @returns {Style}
*/
export declare function mergeStyles(...styles: Style[]): Style;
/**
* 将某个样式与其内部具有指定名称的子样式进行合并
*
* @author Raykid
* @date 2019-08-19
* @export
* @param {Style} style
* @param {string} states
* @returns {Style}
*/
export declare function crossMergeStyles(style: Style, states: string[]): Style;
/**
* 追加样式
*
* @author Raykid
* @date 2019-08-16
* @export
* @param {ReactNodeVisitor} target
* @param {...Style[]} styles
* @returns {Style}
*/
export declare function appendStyles(target: ReactNodeVisitor, ...styles: Style[]): Style;
/**
* 追加ScrollView系列组件的内容容器样式
*
* @author Raykid
* @date 2019-08-28
* @export
* @param {ReactNodeVisitor} target
* @param {...Style[]} styles
* @returns {Style}
*/
export declare function appendContentContainerStyles(target: ReactNodeVisitor, ...styles: Style[]): Style;
export interface ReactNodeVisitorFunctions {
/**
* 查看是否含有某个子节点
*
* @author Raykid
* @date 2019-11-19
* @param {ReactNodeVisitor} child 要测试的子节点Visitor
* @returns {boolean} 是否含有该节点
* @memberof ReactNodeVisitorFunctions
*/
hasChild(child: ReactNodeVisitor): boolean;
/**
* 获取子节点索引
*
* @author Raykid
* @date 2019-11-19
* @param {ReactNodeVisitor} child 子节点Visitor
* @returns {number} 子节点索引
* @memberof ReactNodeVisitorFunctions
*/
getChildIndex(child: ReactNodeVisitor): number;
/**
* 获取指定索引处的子节点Visitor
*
* @author Raykid
* @date 2019-11-19
* @param {number} index 指定索引
* @returns {ReactNodeVisitor} 获取到的子节点Visitor
* @memberof ReactNodeVisitorFunctions
*/
getChildAt(index: number): ReactNodeVisitor;
/**
* 添加显示节点
*
* @author Raykid
* @date 2019-11-19
* @param {(ReactNodeVisitor|React.ReactNode)} child 要添加的显示节点,支持ReactNode或Visitor
* @returns {ReactNodeVisitor} 添加的节点Visitor
* @memberof ReactNodeVisitorFunctions
*/
addChild(child: ReactNodeVisitor | React.ReactNode): ReactNodeVisitor;
/**
* 在指定索引处添加显示节点
*
* @author Raykid
* @date 2019-11-19
* @param {(ReactNodeVisitor|React.ReactNode)} child 要添加的显示节点,支持ReactNode或Visitor
* @param {number} index 要添加到的索引
* @returns {ReactNodeVisitor} 添加的节点Visitor
* @memberof ReactNodeVisitorFunctions
*/
addChildAt(child: ReactNodeVisitor | React.ReactNode, index: number): ReactNodeVisitor;
/**
* 在某个已有子节点前面插入显示节点
*
* @author Raykid
* @date 2019-11-19
* @param {(ReactNodeVisitor|React.ReactNode)} child 要添加的显示节点,支持ReactNode或Visitor
* @param {ReactNodeVisitor} refChild 已有节点Visitor
* @returns {ReactNodeVisitor} 添加的节点Visitor
* @memberof ReactNodeVisitorFunctions
*/
addChildBefore(child: ReactNodeVisitor | React.ReactNode, refChild: ReactNodeVisitor): ReactNodeVisitor;
/**
* 在某个已有子节点后面插入显示节点
*
* @author Raykid
* @date 2019-11-19
* @param {(ReactNodeVisitor|React.ReactNode)} child 要添加的显示节点,支持ReactNode或Visitor
* @param {ReactNodeVisitor} refChild 已有节点Visitor
* @returns {ReactNodeVisitor} 添加的节点Visitor
* @memberof ReactNodeVisitorFunctions
*/
addChildAfter(child: ReactNodeVisitor | React.ReactNode, refChild: ReactNodeVisitor): ReactNodeVisitor;
/**
* 将自身从父容器中移除
*
* @author Raykid
* @date 2019-11-19
* @returns {ReactNodeVisitor} 返回被移除的节点Visitor
* @memberof ReactNodeVisitorFunctions
*/
remove(): ReactNodeVisitor;
/**
* 移除一个子节点
*
* @author Raykid
* @date 2019-11-19
* @param {ReactNodeVisitor} child 要移除的子节点Visitor
* @returns {ReactNodeVisitor} 被移除的节点Visitor
* @memberof ReactNodeVisitorFunctions
*/
removeChild(child: ReactNodeVisitor): ReactNodeVisitor;
/**
* 移除指定索引处的子节点
*
* @author Raykid
* @date 2019-11-19
* @param {number} index 要移除的子节点索引
* @returns {ReactNodeVisitor} 被移除的节点Visitor
* @memberof ReactNodeVisitorFunctions
*/
removeChildAt(index: number): ReactNodeVisitor;
/**
* 清空子节点
*
* @author Raykid
* @date 2019-11-19
* @returns {ReactNodeVisitor[]} 被移除的字节点Visitor列表
* @memberof ReactNodeVisitorFunctions
*/
removeChildren(): ReactNodeVisitor[];
/**
* 替换子节点
*
* @author Raykid
* @date 2019-11-19
* @param {(ReactNodeVisitor|React.ReactNode)} child 要替换成的子节点,支持ReactNode或Visitor
* @param {ReactNodeVisitor} refChild 要被替换的子节点Visitor
* @returns {ReactNodeVisitor} 返回被添加的节点Visitor
* @memberof ReactNodeVisitorFunctions
*/
replace(child: ReactNodeVisitor | React.ReactNode, refChild: ReactNodeVisitor): ReactNodeVisitor;
}
export interface ReactNodeVisitor extends ReactNodeVisitorFunctions {
key?: string;
readonly type: string;
props: any;
node: React.ReactNode;
style: any;
children: ReactNodeVisitorWithKey[] | string;
parent: ReactNodeVisitorWithKey;
keyDict: {
[key: string]: ReactNodeVisitorWithKey;
};
}
export declare type ReactNodeVisitorWithKey = ReactNodeVisitor & {
[key: string]: ReactNodeVisitor;
};
export declare type ReactNodeVisitorWrapper = (node: React.ReactNode) => ReactNodeVisitorWithKey;
/**
* 将ReactNode包装成一个便捷访问的对象,保证方法为连续执行
*
* @author Raykid
* @date 2019-08-15
* @export
* @returns {ReactNodeVisitorWrapper}
*/
export declare function wrapVisitor(): ReactNodeVisitorWrapper;
/**
* 添加ref回调
*
* @author Raykid
* @date 2019-08-28
* @export
* @param {ReactNodeVisitor} target
* @param {(ref:any)=>void} handler
*/
export declare function appendRefHandler(target: ReactNodeVisitor, handler: (ref: any) => void): void;