or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

tessl/npm-rc-cascader

A comprehensive cascading select component for React applications that enables hierarchical option selection through a dropdown interface

Workspace
tessl
Visibility
Public
Created
Last updated
Describes
npmpkg:npm/rc-cascader@3.34.x

To install, run

npx @tessl/cli install tessl/npm-rc-cascader@3.34.0

0

# RC Cascader

1

2

RC Cascader is a comprehensive cascading select component for React applications that enables hierarchical option selection through a dropdown interface. It offers extensive customization options including custom field mapping, dynamic data loading, search functionality, multiple selection modes, and flexible styling through CSS classes and inline styles.

3

4

## Package Information

5

6

- **Package Name**: rc-cascader

7

- **Package Type**: npm

8

- **Language**: TypeScript

9

- **Installation**: `npm install rc-cascader`

10

- **CSS Import**: Import styles from `rc-cascader/assets/index.css`

11

12

## Core Imports

13

14

```typescript

15

import Cascader from "rc-cascader";

16

import { Panel } from "rc-cascader";

17

18

// Access constants via destructuring

19

const { SHOW_PARENT, SHOW_CHILD } = Cascader;

20

21

// Or use Panel from Cascader

22

const Panel = Cascader.Panel;

23

```

24

25

For CommonJS:

26

27

```javascript

28

const Cascader = require("rc-cascader");

29

const { Panel } = require("rc-cascader");

30

31

// Access constants

32

const { SHOW_PARENT, SHOW_CHILD } = Cascader;

33

```

34

35

## Basic Usage

36

37

```typescript

38

import React, { useState } from 'react';

39

import Cascader from 'rc-cascader';

40

import 'rc-cascader/assets/index.css';

41

42

const options = [

43

{

44

label: '福建',

45

value: 'fj',

46

children: [

47

{

48

label: '福州',

49

value: 'fuzhou',

50

children: [

51

{

52

label: '马尾',

53

value: 'mawei',

54

},

55

],

56

},

57

{

58

label: '泉州',

59

value: 'quanzhou',

60

},

61

],

62

},

63

{

64

label: '浙江',

65

value: 'zj',

66

children: [

67

{

68

label: '杭州',

69

value: 'hangzhou',

70

children: [

71

{

72

label: '余杭',

73

value: 'yuhang',

74

},

75

],

76

},

77

],

78

},

79

];

80

81

const App = () => {

82

const [value, setValue] = useState([]);

83

84

const onChange = (value, selectedOptions) => {

85

console.log(value, selectedOptions);

86

setValue(value);

87

};

88

89

return (

90

<Cascader options={options} value={value} onChange={onChange}>

91

<input placeholder="Please select" />

92

</Cascader>

93

);

94

};

95

```

96

97

## Architecture

98

99

RC Cascader is built around several key components:

100

101

- **Main Cascader Component**: Full-featured dropdown cascader with trigger element integration

102

- **Panel Component**: Standalone cascader panel for custom layouts without dropdown behavior

103

- **Option List System**: Multi-column option display with keyboard navigation and accessibility

104

- **Search Engine**: Advanced search with filtering, sorting, and custom rendering capabilities

105

- **Value Management**: Supports both single and multiple selection modes with various display strategies

106

- **Dynamic Loading**: Lazy loading of option data with loading states and error handling

107

108

## Capabilities

109

110

### Core Cascader Component

111

112

The main cascading select component providing dropdown interface with hierarchical option selection.

113

114

```typescript { .api }

115

function Cascader<

116

OptionType extends DefaultOptionType = DefaultOptionType,

117

ValueField extends keyof OptionType = keyof OptionType,

118

Multiple extends boolean | React.ReactNode = false

119

>(props: CascaderProps<OptionType, ValueField, Multiple>): JSX.Element;

120

121

interface CascaderProps<

122

OptionType extends DefaultOptionType = DefaultOptionType,

123

ValueField extends keyof OptionType = keyof OptionType,

124

Multiple extends boolean | React.ReactNode = false

125

> {

126

// Core data and selection

127

options?: OptionType[];

128

value?: GetValueType<OptionType, ValueField, Multiple>;

129

defaultValue?: GetValueType<OptionType, ValueField, Multiple>;

130

onChange?: (

131

value: GetValueType<OptionType, ValueField, Multiple>,

132

selectOptions: GetOptionType<OptionType, Multiple>

133

) => void;

134

135

// Selection behavior

136

checkable?: Multiple;

137

changeOnSelect?: boolean;

138

showCheckedStrategy?: ShowCheckedStrategy;

139

140

// Field customization

141

fieldNames?: FieldNames<OptionType, ValueField>;

142

143

// Dynamic loading

144

loadData?: (selectOptions: OptionType[]) => void;

145

146

// Search functionality

147

showSearch?: boolean | ShowSearchType<OptionType>;

148

searchValue?: string;

149

onSearch?: (value: string) => void;

150

autoClearSearchValue?: boolean;

151

152

// Dropdown behavior

153

open?: boolean;

154

onOpenChange?: (open: boolean) => void;

155

placement?: Placement;

156

builtinPlacements?: BuildInPlacements;

157

getPopupContainer?: (trigger: Node) => Node;

158

dropdownMatchSelectWidth?: boolean;

159

160

// Styling and display

161

prefixCls?: string;

162

className?: string;

163

style?: React.CSSProperties;

164

dropdownClassName?: string;

165

dropdownMenuColumnStyle?: React.CSSProperties;

166

dropdownStyle?: React.CSSProperties;

167

animation?: string;

168

transitionName?: string;

169

170

// Custom rendering

171

displayRender?: (label: string[], selectedOptions?: OptionType[]) => React.ReactNode;

172

optionRender?: (option: OptionType) => React.ReactNode;

173

174

// Icons

175

expandIcon?: React.ReactNode;

176

loadingIcon?: React.ReactNode;

177

178

// Interaction

179

expandTrigger?: 'hover' | 'click';

180

disabled?: boolean;

181

placeholder?: string;

182

notFoundContent?: React.ReactNode;

183

}

184

```

185

186

[Cascader Component](./cascader.md)

187

188

### Panel Component

189

190

Standalone cascader panel for custom layouts without dropdown behavior.

191

192

```typescript { .api }

193

function Panel<

194

OptionType extends DefaultOptionType = DefaultOptionType,

195

ValueField extends keyof OptionType = keyof OptionType,

196

Multiple extends boolean | React.ReactNode = false

197

>(props: PanelProps<OptionType, ValueField, Multiple>): JSX.Element;

198

199

interface PanelProps<

200

OptionType extends DefaultOptionType = DefaultOptionType,

201

ValueField extends keyof OptionType = keyof OptionType,

202

Multiple extends boolean | React.ReactNode = false

203

> {

204

value?: GetValueType<OptionType, ValueField, Multiple>;

205

defaultValue?: GetValueType<OptionType, ValueField, Multiple>;

206

changeOnSelect?: boolean;

207

onChange?: (

208

value: GetValueType<OptionType, ValueField, Multiple>,

209

selectOptions: GetOptionType<OptionType, Multiple>

210

) => void;

211

options?: OptionType[];

212

prefixCls?: string;

213

checkable?: Multiple;

214

fieldNames?: FieldNames<OptionType, ValueField>;

215

showCheckedStrategy?: ShowCheckedStrategy;

216

loadData?: (selectOptions: OptionType[]) => void;

217

expandTrigger?: 'hover' | 'click';

218

expandIcon?: React.ReactNode;

219

loadingIcon?: React.ReactNode;

220

className?: string;

221

style?: React.CSSProperties;

222

direction?: 'ltr' | 'rtl';

223

notFoundContent?: React.ReactNode;

224

disabled?: boolean;

225

}

226

```

227

228

[Panel Component](./panel.md)

229

230

### Search Functionality

231

232

Advanced search capabilities with filtering, custom rendering, and result limiting.

233

234

```typescript { .api }

235

interface ShowSearchType<

236

OptionType extends DefaultOptionType = DefaultOptionType,

237

ValueField extends keyof OptionType = keyof OptionType

238

> {

239

filter?: (

240

inputValue: string,

241

options: OptionType[],

242

fieldNames: FieldNames<OptionType, ValueField>

243

) => boolean;

244

render?: (

245

inputValue: string,

246

path: OptionType[],

247

prefixCls: string,

248

fieldNames: FieldNames<OptionType, ValueField>

249

) => React.ReactNode;

250

sort?: (

251

a: OptionType[],

252

b: OptionType[],

253

inputValue: string,

254

fieldNames: FieldNames<OptionType, ValueField>

255

) => number;

256

matchInputWidth?: boolean;

257

limit?: number | false;

258

}

259

```

260

261

[Search Configuration](./search.md)

262

263

### Multiple Selection

264

265

Multiple selection capabilities with different display strategies and checkbox support.

266

267

```typescript { .api }

268

// Enable multiple selection

269

checkable: true

270

271

// Control display strategy

272

showCheckedStrategy: 'SHOW_PARENT' | 'SHOW_CHILD'

273

274

// Multiple selection value type

275

type MultipleValueType = (string | number)[][];

276

277

// Multiple selection change handler

278

onChange: (value: MultipleValueType, selectOptions: OptionType[][]) => void;

279

```

280

281

[Multiple Selection](./multiple-selection.md)

282

283

## Core Types

284

285

```typescript { .api }

286

interface BaseOptionType {

287

disabled?: boolean;

288

disableCheckbox?: boolean;

289

label?: React.ReactNode;

290

value?: string | number | null;

291

children?: DefaultOptionType[];

292

}

293

294

type DefaultOptionType = BaseOptionType & Record<string, any>;

295

296

interface FieldNames<

297

OptionType extends DefaultOptionType = DefaultOptionType,

298

ValueField extends keyof OptionType = keyof OptionType

299

> {

300

label?: keyof OptionType;

301

value?: keyof OptionType | ValueField;

302

children?: keyof OptionType;

303

}

304

305

type ShowCheckedStrategy = 'SHOW_PARENT' | 'SHOW_CHILD';

306

307

// Constants available on Cascader component

308

Cascader.SHOW_PARENT: 'SHOW_PARENT';

309

Cascader.SHOW_CHILD: 'SHOW_CHILD';

310

311

interface CascaderRef {

312

focus: () => void;

313

blur: () => void;

314

}

315

316

type GetValueType<

317

OptionType extends DefaultOptionType = DefaultOptionType,

318

ValueField extends keyof OptionType = keyof OptionType,

319

Multiple extends boolean | React.ReactNode = false

320

> = false extends Multiple

321

? (string | number)[]

322

: (string | number)[][];

323

324

type GetOptionType<

325

OptionType extends DefaultOptionType = DefaultOptionType,

326

Multiple extends boolean | React.ReactNode = false

327

> = false extends Multiple

328

? OptionType[]

329

: OptionType[][];

330

331

// Dropdown positioning types

332

type Placement =

333

| 'bottomLeft'

334

| 'bottomRight'

335

| 'topLeft'

336

| 'topRight'

337

| 'bottom'

338

| 'top';

339

340

interface BuildInPlacements {

341

[key: string]: {

342

points: string[];

343

offset?: number[];

344

targetOffset?: number[];

345

overflow?: {

346

adjustX?: boolean;

347

adjustY?: boolean;

348

};

349

};

350

}

351

```