面试题答案
一键面试设计思路
- 属性设计:通过传入一个条件属性来决定渲染哪个子组件。同时设计插槽,用于传入不同的子组件内容。
- 可扩展性:采用灵活的插槽机制,使得在不同场景下可以轻松替换需要渲染的组件。
- 性能优化:利用Vue或React等框架的自带优化机制,如虚拟DOM等,减少不必要的DOM操作。
关键实现步骤
- 定义组件:根据使用的框架,定义一个新的条件渲染组件。
- 接收属性:接收一个条件判断属性和插槽内容。
- 条件渲染:根据条件判断属性的值,决定渲染哪个插槽内容。
核心代码示例(以Vue为例)
<template>
<div>
<slot v-if="condition" name="if"></slot>
<slot v-else name="else"></slot>
</div>
</template>
<script>
export default {
name: 'ConditionalRender',
props: {
condition: {
type: Boolean,
required: true
}
}
}
</script>
使用方式:
<template>
<div>
<conditional-render :condition="isLoggedIn">
<template v-slot:if>
<p>欢迎,用户已登录</p>
</template>
<template v-slot:else>
<p>请登录</p>
</template>
</conditional-render>
</div>
</template>
<script>
import ConditionalRender from './ConditionalRender.vue';
export default {
components: {
ConditionalRender
},
data() {
return {
isLoggedIn: false
};
}
}
</script>
核心代码示例(以React为例)
import React from 'react';
const ConditionalRender = ({ condition, children }) => {
const { if: ifChild, else: elseChild } = children;
return condition? ifChild : elseChild;
};
export default ConditionalRender;
使用方式:
import React from'react';
import ConditionalRender from './ConditionalRender';
const App = () => {
const isLoggedIn = false;
return (
<ConditionalRender condition={isLoggedIn}>
{{
if: <p>欢迎,用户已登录</p>,
else: <p>请登录</p>
}}
</ConditionalRender>
);
};
export default App;