首页 > web前端 > js教程 > 正文

在 React 中构建一款可靠的 Pokémon 游戏:开发者的冒险!

聖光之護
发布: 2024-11-09 10:27:29
转载
432人浏览过

在 react 中构建一款可靠的 pokémon 游戏:开发者的冒险!

s:单一职责 - 一只神奇宝贝,一份工作

问题:pokemoncomponent 处理捕捉、战斗和显示分数,违反了 srp。

function pokemoncomponent({ pokemon, oncatch, onbattle, score }) {
  return (
    <div>
      <h2>{pokemon.name}</h2>
      <button onclick={() => oncatch(pokemon)}>catch</button>
      <button onclick={() => onbattle(pokemon)}>battle</button>
      <div>score: {score}</div>
    </div>
  );
}
登录后复制

解决方案:责任划分。

function pokemoncatcher({ pokemon, oncatch }) {
  return <button onclick={() => oncatch(pokemon)}>catch</button>;
}
function pokemonbattler({ pokemon, onbattle }) {
  return <button onclick={() => onbattle(pokemon)}>battle</button>;
}
function scoreboard({ score }) {
  return <div>score: {score}</div>;
}
function pokemongame({ pokemon, oncatch, onbattle, score }) {
  return (
    <div>
      <h2>{pokemon.name}</h2>
      <pokemoncatcher pokemon={pokemon} oncatch={oncatch} />
      <pokemonbattler pokemon={pokemon} onbattle={onbattle} />
      <scoreboard score={score} />
    </div>
  );
}
登录后复制

o:开放/封闭 - 进化的神奇宝贝组件

问题:添加电源等功能需要修改现有组件。

解决方案:使用高阶组件(hoc)。

function withpowerup(pokemoncomponent) {
  return function poweredupcomponent(props) {
    const [ispoweredup, setpowerup] = usestate(false);
    const powerup = () => {
      setpowerup(true);
      settimeout(() => setpowerup(false), 5000);
    };
    return (
      <div>
        <pokemoncomponent {...props} ispoweredup={ispoweredup} />
        <button onclick={powerup}>power up!</button>
      </div>
    );
  };
}

const charmander = ({ ispoweredup }) => (
  <div>charmander {ispoweredup && "(powered up!)"}</div>
);

const poweredcharmander = withpowerup(charmander);

function pokemonapp() {
  return <poweredcharmander />;
}
登录后复制

l:里氏替换 - 可互换的神奇宝贝

问题:交换组件会导致问题。

解决方案:使用基础组件。

function basepokemon({ attack, children }) {
  return (
    <div classname="pokemon">
      <div>attack: {attack}</div>
      {children}
    </div>
  );
}
function pikachu({ attack }) {
  return (
    <basepokemon attack={attack}>
      <h2>pikachu</h2>
    </basepokemon>
  );
}
function charizard({ attack }) {
  return (
    <basepokemon attack={attack}>
      <h2>charizard</h2>
    </basepokemon>
  );
}
function pokemonbattle() {
  return (
    <div>
      <basepokemon attack="tackle">
        <h2>generic pokémon</h2>
      </basepokemon>
      <pikachu attack="thunderbolt" />
      <charizard attack="flamethrower" />
    </div>
  );
}
登录后复制

d:依赖倒置 - 依赖于抽象

问题:组件与数据源紧密耦合。

解决方案:使用上下文进行数据注入。

const PokemonContext = createContext();
function Pikachu() {
  const { attack } = useContext(PokemonContext);
}
<PokemonContext.Provider value={{ attack: "Thunderbolt" }}>
  <Pikachu />
</PokemonContext.Provider>
登录后复制

备忘单:坚实的原则

principle poké-mantra trainer’s tip
single responsibility one pokémon, one role. split complex components into focused ones.
open/closed evolve without changing. use hocs, render props for new features.
liskov substitution components like pokémon moves - interchangeable. ensure components can be used interchangeably.
dependency inversion depend on abstractions, not concretes. use context or props for data management.

以上就是在 React 中构建一款可靠的 Pokémon 游戏:开发者的冒险!的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
相关标签:
来源:dev.to网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号