ReactDOM.render(
<h1>Hello, world!</h1>,
document.getElementById('root')
);
- Declarative
- Component-Based
- Learn Once, Write Anywhere
RN < 0.50 - watchman watch-del-all && rm -rf $TMPDIR/react-* && rm -rf node_modules/ && npm cache clean && npm install && npm start -- --reset-cache | |
RN >= 0.50 - watchman watch-del-all && rm -rf $TMPDIR/react-native-packager-cache-* && rm -rf $TMPDIR/metro-bundler-cache-* && rm -rf node_modules/ && npm cache clean && npm install && npm start -- --reset-cache | |
RN >= 0.63 - watchman watch-del-all && rm -rf node_modules && npm install && rm -rf /tmp/metro-* && npm run start --reset-cache | |
npm >= 5 - watchman watch-del-all && rm -rf $TMPDIR/react-* && rm -rf node_modules/ && npm cache verify && npm install && npm start -- --reset-cache | |
Windows - del %appdata%\Temp\react-native-* & cd android & gradlew clean & cd .. & del node_modules/ & npm cache clean --force & npm install & npm start -- --reset-cache |
// $ frida -l antiroot.js -U -f com.example.app --no-pause | |
// CHANGELOG by Pichaya Morimoto ([email protected]): | |
// - I added extra whitelisted items to deal with the latest versions | |
// of RootBeer/Cordova iRoot as of August 6, 2019 | |
// - The original one just fucked up (kill itself) if Magisk is installed lol | |
// Credit & Originally written by: https://codeshare.frida.re/@dzonerzy/fridantiroot/ | |
// If this isn't working in the future, check console logs, rootbeer src, or libtool-checker.so | |
Java.perform(function() { | |
var RootPackages = ["com.noshufou.android.su", "com.noshufou.android.su.elite", "eu.chainfire.supersu", |
/** | |
* Metro Bundler configuration | |
* https://facebook.github.io/metro/docs/en/configuration | |
* | |
* eslint-env node, es6 | |
*/ | |
const exclusionList = require('metro-config/src/defaults/exclusionList'); | |
const getWorkspaces = require('get-yarn-workspaces'); | |
const path = require('path'); |
In computing, memoization or memoisation
is an optimization technique used primarily
to speed up computer programs by storing
the results of expensive function calls and
returning the cached result when the same
inputs occur again.
— wikipedia
<h1>Wordle</h1> | |
<div id="grid"></div> | |
<style> | |
body, html { | |
background: #111; | |
color: white; | |
font-family: sans-serif; | |
text-align: center; | |
text-transform: uppercase; | |
} |
import { useState, useEffect, useRef, useMemo } from 'react' | |
export default function Wordle() { | |
let [currentAttempt, setCurrentAttempt] = useState('') | |
let [bestColors, setBestColors] = useState(() => new Map()) | |
let [history, setHistory] = usePersistedHistory(h => { | |
waitForAnimation(h) | |
}) | |
useEffect(() => { |
As someone who has released many apps starting in 2015 using frameworks such as Cordova and Ionic, and more recently using React Native and Expo, I have learned that the rules for publishing apps can change frequently and can sometimes be challenging to navigate. With that in mind, I want to provide a brief guide to help others navigate the process. While this guide may not cover every aspect of publishing an app, it does cover general tips and information that should be useful for anyone looking to release their app on the App Store or Google Play.
There are significant differences between Apple and Google when it comes to metadata. Apple is generally stricter than Google, so it is advisable to follow Apple's guidelines to ensure the best chances of success on both platforms. Here are some tips to keep in mind:
{ | |
"rules": { | |
"no-restricted-imports": [ | |
"error", | |
{ | |
"paths": [ | |
{ | |
"name": "next/router", | |
"message": "Not universal. Use solito/router instead." | |
}, |
import { | |
Canvas, | |
DataSourceParam, | |
dist, | |
ImageShader, | |
rect, | |
RoundedRect, | |
rrect, | |
Shader, | |
Skia, |